Ich versuche, eine Fehlermeldung über Json vom ASP.NET MVC-Controller zurückzugeben. Ich möchte Wagenrückläufe auf dem Bildschirm anzeigen, damit der Fehler wie folgt aussieht:
Fehler 1.
Fehler 2.
Anstatt von "Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e"
.ajax({...
error: function(xhr, textStatus, exceptionThrown) {
var errorData = $.parseJSON(xhr.responseText);
var errorMessages = [];
//this ugly loop is because List<> is serialized to an object instead of an array
for (var key in errorData)
{
errorMessages.push(errorData[key]);
}
$('#result').html(errorMessages.join("<br />"));
},
Sie können auch ein spezifischeres Fehlerobjekt zurückgeben und eine Vorlagenlösung verwenden, aber das ist die Idee
Avi, das ist großartig. Klappt wunderbar. Ich danke dir sehr.
– Netzdraht
14. Oktober 2010 um 20:02 Uhr
Sind Sie sicher, dass dies keinen Erfolg bringen würde? Normalerweise mache ich: return Json(new { success = false, errors = … });
– Santhos
8. Dezember 2014 um 9:39 Uhr
Wenn Sie httpCode 500 zurückgeben, wird die Fehlerfunktion aufgerufen und nicht die Erfolgsfunktion. In Ihrer Lösung müssen Sie bei jeder Erfolgsfunktion überprüfen, ob Sie einen Fehler erhalten haben. Übrigens: Die Done/Complete-Funktionen werden aufgerufen, egal welchen httpCode Sie zurückgeben
– AviPinto
8. Dezember 2014 um 13:14 Uhr
Das Zurückgeben von HttpStatusCode.BadRequest funktioniert nicht in unserer Testumgebung, funktioniert aber in meiner Entwicklungsumgebung. Die Ajax-Fehlerfunktion wird nie getroffen. Irgendwelche Hinweise?
– Speck
8. Dezember 2016 um 3:01 Uhr
Hallo Jeff, das ist seltsam, schau dir die DevTools an, gibst du 400 vom Server zurück? Vielleicht hat jemand in Ihrer web.config eine Überschreibung dafür platziert, dass eine Umleitung zu einer Fehlerseite zurückgegeben wird, um zu verhindern, dass Benutzer Fehlerseiten (wie das YSOD) sehen können. Jeder Statuscode> 400 wird von jQuery als Fehler beim Client betrachtet
– AviPinto
8. Dezember 2016 um 8:04 Uhr
Wenn Sie JSON verwenden, möchten Sie wahrscheinlich kein HTML einbetten (dies widerspricht dem Zweck, ein „Daten“-Objekt zurückzugeben, das Sie in der Ansicht formatieren.)
Wenn Sie HTML zurückgeben möchten, können Sie dies in Ihrem Controller tun:
Das Zurückgeben von HttpStatusCode funktioniert nicht in unserer Testumgebung, funktioniert aber auf meinem Entwicklungscomputer. Die Ajax-Fehlerfunktion wird nie getroffen. Irgendwelche Hinweise?
– Speck
8. Dezember 2016 um 3:03 Uhr
Oleg
Mir scheint, Sie haben schon fast alles richtig gemacht. Die Ergebnisse, die Sie in der haben xhr.responseText ist ein JSON-String. Du solltest also nur einen zusätzlichen Anruf der einbauen JSON.parse Funktion
dann die Daten wie '"Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e"' wird in den String umgewandelt 'Error 1.<br/>Error 2.<br/>'.
Innen success Event-Handler der ajax Funktionsaufruf JSON.parse für dich, aber es tut dies nicht innerhalb der error Handler. Das Konvertieren der Serverantwort aus dem JSON-String muss also manuell erfolgen.
Ja, Sie vereiteln den Zweck, wie @Hector sagte.
Und wenn Sie echtes JSON zurückgeben möchten, versuchen Sie vielleicht, a zurückzugeben Json(Dictionary<String, Object>) anstelle einer Json(string).
12579400cookie-checkJSON-Fehler von ASP.NET MVC zurückgebenyes
Ich nehme an, ist ein Tippfehler.
– Alex
11. Oktober 2010 um 17:41 Uhr