2012-12-18 15 views
23

Widziałem kilka wątków na ten temat i próbowałem wszystkich odpowiedzi (ASP.NET MVC JsonResult return 500)

Moje żądanie ajax ponownie zwraca błąd wewnętrzny o wartości 500. Jeśli debuguję, nigdy nie dostanę się do mojej akcji.

Oto moje wezwanie ajax:

$.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); 
        } 
       }); 

I moje działanie:

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

     return Json(updatedItem, JsonRequestBehavior.DenyGet); 
    } 

Używanie konsoli chrom, są to nagłówki odpowiedzi z odpowiedzi:

HTTP/1.1 500 Wewnętrzny błąd serwera Cache-Control: prywatny Content-Type: text/html; charset = utf-8 Serwer: Microsoft-IIS/7.5 X-AspNetMvc-Version: 3.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Data: wtorek, 18 grudnia 2012 21 : 53: 41 GMT Długość zawartości: 17041

Logi serwera nie zawierają kodów podstanu. Masz pojęcie, co tu robię źle? Wolę używać POST zamiast GET.

Postać Dane są przedstawione jako:

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

newParentItemId: puste

newPreviousItemId: null

które jest poprawne.

Próbowałem ustawienie contentType na application/json i tradycyjny = true jak w tej kwestii: Sending ajax post to mvc with "application/json; charset=utf-8" returns error 500 from vs web developer server

sam błąd.

+3

Czy próbowałeś oglądać surowy POST za pomocą Skrzypka, aby zobaczyć, co przechodzi przez przewód? –

+1

możesz udostępnić sposób ustawiania tras? – kabaros

+0

Trasa działa, teraz korzysta z domyślnej reguły trasy wypełnionej przez dodanie obszaru. Jeśli zmienię akcję, aby zwrócić widok i wpisać adres URL, działa, więc trasa jest poprawnie przetwarzana. – SventoryMang

Odpowiedz

59

Cóż, udało mi się dowiedzieć, jaki był problem, nie było nic złego w mojej składni AJAX, a nawet akcji. Po prostu mój powrócony obiekt zawierał cykliczne odniesienie. Byłem w stanie zobaczyć faktyczny błąd w konsoli chrome, klikając żądanie POST w zakładce Network, a następnie przeglądając kartę podglądu. Spowoduje to wyświetlenie faktycznego komunikatu o błędzie.

+2

Mogłem rozwiązywać podobne problemy w Narzędziach programistycznych IE11 za pomocą karty Sieć> Szczegóły> Ciało odpowiedzi. –

+0

Dla każdego, kto wciąż ma problemy, sprawdź to [rozwiązanie] (http://stackoverflow.com/a/16916600/4896260). Zapewnia bardziej szczegółowy błąd, którego Fiddler i tacy nie byli w stanie zapewnić. – usr4896260

1

Fiddler to doskonałe narzędzie do przechwytywania żądań http, które jest bardzo przydatne do debugowania odpowiedzi między stroną klienta a serwerem. Po prostu otwórz go, gdy podejrzewasz problem w przeglądarce, a gdy wystąpi błąd, otwórz skrzypce i wybierz żądanie, a następnie wyświetl jego surowe informacje.

0

jeśli nie trzeba updatedItem w sukces to nie powrócić po prostu wrócić Zmienną prostą

1

Stary post, alternatywną odpowiedź ... Na wszelki wypadek ktoś kończy się tutaj ..

Mój problem spowodowany był faktem, że wywołana przeze mnie akcja kontrolera zwróciła wynik działania w części, a plik PartialView .cshtml nie został opublikowany na serwerze (nie został "uwzględniony" w projekcie Visual Studio podczas publikowania) .