Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

return Json error from ASP.NET MVC

I'm trying to return an error message via Json from ASP.NET MVC controller. I want to display carriage returns on the screen, so the error will look like:

Error 1.
Error 2.

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

Here's my ASP.NET MVC code

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

Debugging the xhr.responseText yields: ""Error1.\u003cbr/\u003eErro2.\u003cbr.\u003e""

Any ideas?

like image 692
netwire Avatar asked Oct 11 '10 17:10

netwire


2 Answers

would be nicer to return a list of errors and then build the html at the client.

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

and then at the client side

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

you can also return a more specific error object and use a template solution, but this is the idea

like image 194
Avi Pinto Avatar answered Sep 30 '22 14:09

Avi Pinto


If you are using JSON you probably don't want to embed HTML (that sort of defeats the purpose of returning a "data" object that you will format on the view.)

If you want to return HTML you could do this in your controller:

Response.StatusCode = (int)HttpStatusCode.BadRequest; return Content("Error 1.<br/>Error 2.<br/>");  
like image 24
Hector Correa Avatar answered Sep 30 '22 14:09

Hector Correa