Empfangen von JSON-Daten innerhalb OnComplete-event-Funktion in Ajax.Beginform
Ich versuche, die Ajax verwenden.BeginForm Funktionen.
Form gepostet ist richtig, aber ich brauche zum abrufen von Daten im json-format, von meinem controller-action und erfrischt die div mit dem Operationsergebnis Meldung.
Ich haben einige Vorschläge hier im Stackoverflow, aber keiner ist hilfreich.
Hier ist ein Vorschlag gefunden:
var data = content.get_response().get_object();
Aber es hat nicht funktioniert für mich. Und ich glaube, die ist veraltet, die bis heute funktionsfähig nur für MVC 2 und niedrigeren Versionen.
Meine aktuelle MVC version ist 3.
Hier ist ein Stück code:
<script type="text/javascript">
function fnCompleted(data){
if(data.Success)
$("#somediv").html(data.StatusMessage).addClass("success");
else
$("#somediv").html(data.StatusMessage).addClass("error");
}
</script>
@{
var ajaxOptions= new AjaxOptions{
OnComplete= "fnCompleted",
Url= '@Url.Action("myAction", "myController")',
Method= "POST"
}
<div id="somediv">/*Here goes the json response*/</div>
using(Ajax.BeginForm(ajaxOptions)){
@Html.EditorForModel()
<input type="submit" name="send" value="Send">
}
Hier ist ein Stück von meinem controller-action:
[HttpPost]
public JsonResult myAction(MyModel mymodel)
{
try
{
if (myModel== null)
throw new Exception("The model is empty");
if (!ModelState.IsValid)
throw new Exception("The model is wrong");
var found = /*Look for existence of the model in the database*/;
if(found)
throw new Exception("Already exists the object");
/*Operation with the database*/
var result = Json(
new
{
Success = true,//success
StatusMessage = "Object created successfully"
});
return result;
}
catch (Exception exception)
{
var result = Json(
new
{
Success = false,//error
StatusMessage = exception.Message
});
return result;
}
}
- fügen Sie, was Sie versucht, um Ihre post
- Bitte geben Sie ein code-Beispiel, so können wir klarer verstehen, was du beschreibst. Was haben Sie versucht? Was funktionierte? Wie weit haben Sie bekommen? Ein JSFiddle wäre ideal, und einige Beispiel-code aus dem Controller, die Sie versuchen zu nennen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Erklärung, dass Gewinne beste interpretation für uns könnte sein, dass:
Wenn wir OnComplete und JSON, die Antwort ist eingebettet direkt an den DOM von der Seite. Für diese Zwecke stattdessen ist es angeraten, OnSuccess und OnFailure. Tatsächlich Griff perfekt JSON-Ergebnisse aus einer controller-action.
Ich Zuständigkeitsbereich Euch zu Den link, hat mir geholfen, dass war die gleiche, die ich bisher ignoriert, die ich Las weiter und fand die Joel Purra ' s Antwort.
In Ajax.BeginForm:
Script-block:
data.responseText
und parseto json-Objekt. Noch. gute Antwort. DankGibt es eine Möglichkeit von speichern das Ergebnis in der Ansicht OnComplete JS-Funktion?
selbstverständlich gibt es mehrere Möglichkeiten zum speichern der Daten erhalten Sie von durch den controller kann ich schlage vor, Sie verwenden ein client-Modell so etwas wie backbone.js Modell.
Verwenden backbone.js Modell ist es möglich, formatierte JSON-Daten-Objekte und-Sammlungen im client-Seite.
Weitere Möglichkeit ist die Verwendung von versteckten browser-variable kleine Menge von Daten ist möglich zum speichern im hidden-input-regler.
Und ein anderer Weg ist die Verwendung eines session-Cookies.
Edit: wenn der client-side MVC, wie backbone.js verwendet werden kann, müssen Sie möglicherweise erneut besuchen Ihre aktuelle Ansicht-design. Aber auf lange Sicht ich denke, es ist vorteilhaft.