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?
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
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/>");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With