2012-12-18 10 views
23

Ich habe mehrere Threads darüber gesehen, und ich habe alle Antworten versucht (ASP.NET MVC JsonResult return 500)

Meine Ajax-Anfrage ist ein 500 Interner Fehler erneut drehen. Wenn ich debugge, komme ich nie zu meiner Aktion.

Hier ist meine Ajax-Aufruf:

$.ajax({ 
        url: '@Url.Action("UpdateSortOrder", "FormItems")', 
        data: { itemToUpdateId: item.attr("id"), newParentItemId: parentItemId, newPreviousItemId: previousItemId }, 
        type: 'POST', 
        success: function (data) { 
         console.log(data); 
        }, 
        error: function (xhr, status, exception) { 
         console.log("Error: " + exception + ", Status: " + status); 
        } 
       }); 

Und meine Aktion:

[HttpPost] 
    public ActionResult UpdateSortOrder(Guid itemToUpdateId, Guid newParentItemId, Guid newPreviousItemId) 
    { 
     FormItem updatedItem = _formItemService.GetOne(x => x.Id == itemToUpdateId); 

     return Json(updatedItem, JsonRequestBehavior.DenyGet); 
    } 

Chromkonsole verwenden, das sind die Antwort-Header aus der Antwort:

HTTP/1.1 500 Interner Serverfehler Cache-Control: privat Content-Type: text/html; charset = utf-8 Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 3.0 X-ASPNET-Version: 4.0.30319 X-Powered-By: ASP.NET Datum: Di, 18. Dezember 2012 21 : 53: 41 GMT Content-Length: 17041

Server-Protokolle zeigen keine Substatus Codes. Irgendeine Idee, was ich hier falsch mache? Ich habe es vorgezogen, POST anstelle von GET zu verwenden.

die Formulardaten wird wie folgt angezeigt:

itemToUpdateId: 18ac5399-342e-4a39-9da1-3281a89501df

newParentItemId: null

newPreviousItemId: null

Welche ist richtig.

Ich habe versucht, die content auf application/json und traditionellen = true wie in dieser Frage setzen: Sending ajax post to mvc with "application/json; charset=utf-8" returns error 500 from vs web developer server

gleiche Fehler.

+3

Haben Sie versucht, den rohen POST mit Fiddler zu sehen, um zu sehen, was über die Leitung geht? –

+1

können Sie teilen, wie Sie Ihre Routen einstellen? – kabaros

+0

Die Route funktioniert, im Moment wird nur die Standardroutenregel verwendet, die durch Hinzufügen eines Bereichs ausgefüllt wird. Wenn ich die Aktion ändere, um eine Ansicht zurückzugeben und die URL einzugeben, funktioniert sie, so dass die Route korrekt verarbeitet wird. – SventoryMang

Antwort

59

Nun, ich war in der Lage herauszufinden, was das Problem war, es war nichts falsch mit meiner AJAX-Syntax oder sogar die Aktion. Es war nur, dass mein zurückgegebenes Objekt einen Zirkelbezug enthielt. Ich konnte den tatsächlichen Fehler in der Chrome-Konsole sehen, indem ich auf der Registerkarte "Netzwerk" auf die POST-Anforderung klickte und dann die Vorschau-Registerkarte anzeigte. Dies zeigte die tatsächliche Fehlermeldung an.

+2

Fehler in ähnlicher Weise in IE11-Entwicklertools behoben. Verwenden Sie dazu die Registerkarte Netzwerk> Details> Antworttext. –

+0

Für alle anderen, die noch Probleme haben, lesen Sie diese [Lösung] (http://stackoverflow.com/a/16916600/4896260). Es bietet einen detaillierteren Fehler, den Fiddler und andere nicht bieten konnten. – usr4896260

1

Fiddler ist ein großartiges Tool zum Abfangen von HTTP-Anfragen, was sehr nützlich für Debugging-Antworten zwischen Client-Seite und Server-Seite ist. Öffnen Sie es einfach, wenn Sie das Problem in Ihrem Browser vermuten, und wenn der Fehler auftritt, öffnen Sie fiddler und wählen Sie die Anfrage, dann sehen Sie sich die Rohdaten an.

0

wenn Sie nicht brauchen updatedItem in Erfolg dann nicht zurück zurückgeben nur eine einfache Variable

1

Alte Post, alternative Antwort ... Nur für den Fall, dass jemand endet hier oben ..

Mein Problem wurde durch die Tatsache verursacht, dass meine Controller-Aktion, die ich anrief, ein Partial View Action Ergebnis zurückgab und die PartialView .cshtml Datei nicht auf dem Server veröffentlicht wurde (war nicht im Visual Studio-Projekt enthalten) .