2010-10-11 19 views
29

ASP.NET MVC denetleyicisinden Json aracılığıyla bir hata iletisi döndürmeye çalışıyorum. Ekranda satırbaşı görüntülemek istediğiniz, böylece hata bakacağız gibi:, Json hatası, ASP.NET MVC'den

Hata 1.
Hata 2.

yerine "Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e"

İşte benim ASP.NET MVC var kod

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
string str = "Error 1.<br/>Error 2.<br.>"; 
return Json(str); 

JavaScript (redacted):

.ajax({... 
    error: function(xhr, textStatus, exceptionThrown) { 
     $('#result').html(xhr.responseText); 
    }, 

ayıklama xhr.responseText verimleri: ""Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e""

Herhangi bir fikir? Eğer JSON kullanıyorsanız

+0

olduğunu olabilir : D. – bastijn

+0

yazım hatası varsayalım. – Alex

cevap

62

.

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
List<string> errors = new List<string>(); 
//..some processing 
errors.Add("Error 1"); 
//..some processing 
errors.Add("Error 2"); 
return Json(errors); 

ve

sonra istemci tarafında

.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 />")); 
    }, 

ayrıca, benim kötü daha belirgin bir hata nesnesi dönmek ve bir şablon çözümü kullanmak, ama bu hızlı okuma fikri

+0

Avi, bu harika. ÇALIŞIYOR bir cazibe gibi. Çok teşekkür ederim. – Dean

+0

bu işe yaradığı için mutluyum :) –

+1

Bunun başarıya dönüşmeyeceğine emin misin? Genellikle yaparım: Json'u döndür (yeni {success = false, errors = ...}); – Santhos

12

muhtemelen HTML yerleştirmek istemiyoruz (yenilgilerden bu tür size görünümünde biçimlendirir bir "veri" nesne dönen amacı.)

Eğer dönmek isterseniz ..

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
return Content("Error 1.<br/>Error 2.<br/>"); 
+0

Dönen HttpStatusCode, test ortamımızda çalışmıyor, ancak dev makinemde çalışıyor. Ajax hatası işlevi asla vurulmaz. Herhangi bir ipucu? – Jeff

2

Evet, sen @Hector gibi amaç söz konusu yenerek ediyoruz

Ve gerçek JSON dönmek istiyorsanız, belki Json(Dictionary<String, Object>) dönen deneyin yerine: HTML size denetleyicisi bu yapabileceğini Json(string).

5

Bana hemen hemen her şeyi doğru yaptığınızı düşünüyorum. xhr.responseText'da sahip olduğunuz sonuçlar bir JSON dizgisidir. Yani

.ajax({... 
    error: function(xhr, textStatus, exceptionThrown) { 
     $('#result').html(JSON.parse(xhr.responseText)); 
    }, 

sonra '"Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e"' gibi veri dizesi 'Error 1.<br/>Error 2.<br/>' dönüştürülecektir JSON.parse fonksiyonun sadece bir ek çağrıyı eklemek gerekir. success olayın içinde

sizin için ajax işlev çağrısını JSON.parse işleyicisi, ancak error işleyicisi içinde bu değil yok. Yani sunucu yanıtını JSON dizgisinden dönüştürerek el ile yapmanız gerekir. Hata listesini döndürmek ve sonra istemcide html oluşturmak için