2010-10-11 17 views
29

से जेसन त्रुटि लौटाएं मैं एएसपी.नेट एमवीसी नियंत्रक से जेसन के माध्यम से एक त्रुटि संदेश वापस करने की कोशिश कर रहा हूं। मैं स्क्रीन पर कैरिएज रिटर्न प्रदर्शित करना चाहते हैं, तो त्रुटि दिखेगा की तरह:एएसपी.नेट एमवीसी

त्रुटि 1.
त्रुटि 2.

बजाय

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

यहाँ मेरी ASP.NET MVC है कोड

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

जावास्क्रिप्ट (संशोधित):

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

डिबगिंग xhr.responseText पैदावार: ""Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e""

कोई भी विचार?

+0

मैं तेजी से करने के लिए पढ़ा है, मेरा बुरा : डी। – bastijn

+0

मुझे लगता है कि एक टाइपो है। – Alex

उत्तर

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); 

और फिर ग्राहक के पक्ष में

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

आप भी अधिक विशिष्ट त्रुटि वस्तु लौट सकते हैं और एक टेम्पलेट समाधान का उपयोग, लेकिन इस विचार

+0

एवी, यह कमाल है। एक जादू की तरह काम करता है। बहुत बहुत धन्यवाद। – Dean

+0

खुश है कि इससे मदद मिली :) –

+1

क्या आप वाकई सफलता वापस नहीं करेंगे? मैं आमतौर पर करता हूं: जेसन लौटाएं (नई {सफलता = झूठी, त्रुटियां = ...}); – Santhos

12

आप JSON का उपयोग कर रहे हैं, तो आप शायद नहीं एचटीएमएल एम्बेड करना चाहते हैं (पराजय की इस प्रकार की एक "डाटा" उद्देश्य यह है कि आप को देखने पर स्वरूपित होगा लौटने का उद्देश्य।)

आप वापस जाने के लिए चाहते हैं एचटीएमएल आप अपने नियंत्रक में ऐसा कर सकता है:

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

रिटर्निंग HttpStatusCode हमारे परीक्षण वातावरण में काम नहीं करता है लेकिन मेरी dev मशीन पर काम करता है। AJAX विफलता समारोह कभी हिट नहीं होता है। कोई सुराग? – Jeff

2

हां, आप को हराने रहे @Hector तरह उद्देश्य कहा ..

और अगर आप सच JSON वापस करना चाहते हैं, शायद के बजाय एक Json(Dictionary<String, Object>) लौटने की कोशिश एक Json(string)

5

ऐसा लगता है कि आपने लगभग हर चीज को सही बना दिया है। आपके पास xhr.responseText में परिणाम जेएसओएन स्ट्रिंग है। तो तुम JSON.parse समारोह

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

तो '"Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e"' की तरह डेटा स्ट्रिंग 'Error 1.<br/>Error 2.<br/>' में परिवर्तित हो जाएगा का केवल एक अतिरिक्त कॉल डालूँ।

success घटना के अंदर हैंडलर को आप के लिए ajax समारोह कॉल JSON.parse, लेकिन यह error हैंडलर के अंदर इस नहीं है। तो जेएसओएन स्ट्रिंग से सर्वर प्रतिक्रिया को परिवर्तित करना आपको मैन्युअल रूप से करना है।

संबंधित मुद्दे