2012-12-18 18 views
23

Bu konuyla ilgili birkaç konu gördüm ve tüm bu yanıtları denedim (ASP.NET MVC JsonResult return 500)

ajax isteğim 500 Dahili Hatayı yeniden çeviriyor. Hata ayıksam, hiçbir zaman aksiyonuma bile girmem. İşte

benim ajax çağrısıdır:

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

Ve eylemi:

HTTP/1.1: Krom konsolunu kullanarak

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

     return Json(updatedItem, JsonRequestBehavior.DenyGet); 
    } 

, bu yanıttan yanıt başlıkları şunlardır 500 İç Sunucu Hatası Önbellek Denetimi: özel İçerik Türü: text/html; charset = utf-8 Sunucu: Microsoft-IIS/7.5 X-AspNetMvc-Version: 3.0 X-aspnet-Versiyon: 4.0.30319 X-Powered-By: ASP.NET Tarih: Sal, 18 Aralık 2012 21 : 53: 41 GMT Içerik Uzunluk: 17041

Sunucu günlükleri alt veri kodları göstermiyor. Burada yanlış yaptığım bir fikrin var mı? GET yerine POST kullanmayı tercih ediyorum.

Form Verilerini olarak gösteriliyor:

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

newParentItemId: boş

newPreviousItemId: boş

Hangi doğru. Bu soru gibi uygulama/json ve = geleneksel true contentType ayarlama denedim

: Sending ajax post to mvc with "application/json; charset=utf-8" returns error 500 from vs web developer server

aynı hata.

+3

Telden geçenleri görmek için ham POST'u Fiddler kullanarak görüntülemeyi denediniz mi? –

+1

Rotalarınızı nasıl ayarlayacağınızı paylaşabilirsiniz? – kabaros

+0

Rota çalışıyor, şu anda sadece bir alan ekleyerek doldurulan varsayılan rota kuralını kullanıyor. Bir görünümü döndürüp URL'yi yazacak şekilde eylemi değiştirirsem çalışır, böylece yol doğru şekilde işlenir. – SventoryMang

cevap

59

Sorunun ne olduğunu anlayabildim, AJAX sözdiziminde ve hatta eylemimde bir sorun yoktu. Sadece döndüğüm nesnenin döngüsel bir referans içermesiydi. Chrome konsolundaki gerçek hatayı Ağ sekmesi altındaki POST isteğine tıklayarak ve önizleme sekmesini görüntüleyerek görebildim. Bu gerçek hata mesajını görüntüledi.

+2

Benzer şekilde IE11 Geliştirici Araçları'nda Ağ sekmesi> Ayrıntılar> Yanıt gövdesi kullanılarak sorun giderildi. –

+0

Halen sorun yaşayan başkaları için bu [çözümün] bölümüne bakın (http://stackoverflow.com/a/16916600/4896260). Fiddler ve bunun sağlayamadığı daha ayrıntılı bir hata sağlar. – usr4896260

1

Fiddler, istemci tarafı ve sunucu tarafı arasındaki yanıtları ayıklamak için oldukça yararlı olan http isteklerini yakalamak için harika bir araçtır. Sadece tarayıcınızdaki problemden şüpheleniyorsanız açın ve hata açık kemancı olduğunda ve isteği seçtikten sonra ham bilgilerini görüntüleyin.

0

sonra birisi burada biter Sadece durumunda ... sadece basit bir değişkeni

1

Eski yazı, alternatif yanıt dönmek döndürmez başarısında updatedItem gerekmiyorsa ..

Aradığım, denetleyicimin arandığım bir Kısmi Görünüm İşlem Sonuçını döndürdüğü ve PartialView .cshtml dosyasının sunucuda yayınlanmadığı (Visual Studio projesinde yayımlama sırasında "dahil edilmedi") nedeniyle benim sorunum oldu. .