Rückgabe von JSON-Ergebnis in MVC2 bei der Post
Ich bin mit der ajax-post-Methode zum senden des Formulars wie :-
$(function () {
$('#BtnName').submit(function () { $.ajax({ url: 'Home/Index', type: "POST", data: $(this).serialize(), dataType: "json", async:false, contentType: 'application/json; charset=utf-8', success: function (data) { var message = data.Result; $("#Result").html(message); }, }); return false; }); });
In der action-Steuerung i m Rückkehr
return Json(new { Result = "Erfolg" },
JsonRequestBehavior.AllowGet);
ich m nicht in der Lage, um das Ergebnis in die div ; stattdessen seiner Rückkehr die ganze Rendern der Seite als komplette Datei. Bitte sagen Sie mir, was soll ich tun, um das Ergebnis auf die Seite und wollen auch auf der gleichen Seite ohne clearing-form.
- alle anzeigen der controller-code.
- ich bin nur inesterting Werte in der Datenbank und am Ende der controller-i m mit return Json(new { Result = "Erfolg" }, JsonRequestBehavior.AllowGet);
- Sie sind die Call-home/index in Ihrer ajax-Methode. sind Sie sicher, es ist die gleiche Methode, die json-Rückgabe?
- ja,die Methode der Rückkehr JsonResult als public JsonResult Index(FormCollection frm)
- warum würden Sie brauchen
JsonRequestBehavior.AllowGet
wenn IhrPOST
'ing, um deine action-Methode? Sie brauchen das nicht. Was bedeutet Fiddler Karte kommt wieder aus der HTTP-POST? - URL erscheint leer im Fiddler ' nur anzeigen / habe ich auch entfernt JsonRequestBehavior.AllowGet aber das Ergebnis ist das gleiche und ich bin immer eine Datei mit { Result = "Success" }. Bitte sagen Sie mir, was soll ich tun um es zu beheben.
- Was bin ich? Aus den vorstehenden scheint Ihre Klage zurück, was Sie es haben wollen? Warnung die variable message. Sie haben auf jeden Fall ein div mit einer id-Attribut als "Ergebnis"
- Ich habe versucht verschiedene option und nichts fr mich jetzt
- Was erwarten Sie, um wieder aus Ihrer Aktion neben {Result = "Success"}
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, die code bits enthalten, die in Ihrer Frage sind völlig unzureichend, um Rückschlüsse zu ziehen. Also machen wir ein vollständiges Beispiel.
Modell:
Controller:
Anzeigen:
Externer javascript-unauffällig AJAXify form:
Dinge zu beachten:
.submit
event zu den wenn in der form (#myForm
), in der Erwägung, dass in Ihrem Beispiel, Sie sind mit#BtnName
sieht die einen seltsam verdächtigen Namen für ein Formular. Leider haben Sie nicht gezeigt, markup, so dass wir nicht wissen, was es eigentlich darstelltHome/Index
), sondern unter Berufung auf die man erzeugt durch dieHtml.BeginForm
. Es gibt zwei Vorteile: 1. youcan nun setzen Sie Ihren javascript-Code in eine separate Datei => Sie sind nicht mehr mischen markup -, script und HTML-Seite werden nun kleiner und schneller zu laden (die externe statische javascript-Dateien, die zwischengespeichert werden) und 2. beim bereitstellen der Anwendung auf einem anderen server, oder Sie entscheiden sich zu ändern Ihre Routen, es wird immer noch funktionieren, ohne irgendwelche änderungen auf Ihrer js.contentType: 'application/json'
weil man, wenn man$(this).serialize()
dies nicht serialisieren, die in form von JSON. Es serialisiert in einapplication/x-www-form-urlencoded
Stil. So sind Sie im Grunde die Einführung eines Widerspruch:Sie sind, dem server mitzuteilen, dass Sie und senden Sie eine JSON-request ist aber in der Praxis nicht.
async: false
Attribut braucht eine synchrone Anfrage und friert der browser während der Ausführung. Es ist nicht mehr AJAX. Also, wenn Sie dies möchten, verwenden Sie es nicht.dataType: 'json'
parameter wie jQuery ist intelligent genug, um zu folgern dies aus der tatsächlichen ReaktionContent-Type
header und Parsen der zurückgegebenen JSON und an den Erfolg-Rückruf als ein javascript-Objekt, könnte man direkt nutzen.