Asp.net mvc 从ASP.NET MVC返回Json错误
我试图通过Json从ASP.NET MVC控制器返回一条错误消息。我想在屏幕上显示回车,因此错误如下: 错误1。Asp.net mvc 从ASP.NET MVC返回Json错误,asp.net-mvc,jquery,Asp.net Mvc,Jquery,我试图通过Json从ASP.NET MVC控制器返回一条错误消息。我想在屏幕上显示回车,因此错误如下: 错误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(s
错误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);
调试xhr.responseText会产生:“”错误1。\u003cbr/\u003eErro2。\u003cbr。\u003e”“
有什么想法吗?如果您使用的是JSON,您可能不想嵌入HTML(这有点违背了返回将在视图上格式化的“数据”对象的目的。) 如果要返回HTML,可以在控制器中执行以下操作:
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Content("Error 1.<br/>Error 2.<br/>");
Response.StatusCode=(int)HttpStatusCode.BadRequest;
返回内容(“错误1.
错误2.
”);
是的,你违背了@Hector所说的目的
如果你想返回真正的JSON,也许可以尝试返回一个
JSON(字典)
,而不是JSON(字符串)
在我看来,你几乎已经把所有事情都做对了。xhr.responseText
中的结果是一个JSON字符串。因此,您应该只插入一个额外的JSON.parse函数调用
.ajax({...
error: function(xhr, textStatus, exceptionThrown) {
$('#result').html(JSON.parse(xhr.responseText));
},
然后像“Error 1.\u003cbr/\u003eErro2.\u003cbr.\u003e”这样的数据将转换为字符串“Error 1.
Error 2.
在success
事件处理程序中,ajax
函数调用JSON.parse
为您,但它在错误处理程序中执行此操作。因此,必须手动从JSON字符串转换服务器响应。最好返回错误列表,然后在客户端构建html
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);
Response.StatusCode=(int)HttpStatusCode.BadRequest;
列表错误=新列表();
//…一些处理
错误。添加(“错误1”);
//…一些处理
错误。添加(“错误2”);
返回Json(错误);
然后在客户端
.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 />"));
},
.ajax({。。。
错误:函数(xhr、textStatus、exceptionThrown){
var errorData=$.parseJSON(xhr.responseText);
var errorMessages=[];
//这个丑陋的循环是因为列表被序列化为对象而不是数组
for(错误数据中的var键)
{
errorMessages.push(errorData[key]);
}
$('#result').html(errorMessages.join(“
”);
},
您还可以返回一个更具体的错误对象并使用模板解决方案,但这是我假设的想法。Avi,这太棒了。效果很好。非常感谢。您确定这不会返回成功吗?我通常是这样做的:返回Json(新的{success=false,errors=…});当您返回httpCode 500时,将调用error函数,而不是success函数。在您的解决方案中,您必须检查每个success函数以查看是否有错误。顺便说一句,无论您返回什么httpCode,都将调用Done/complete函数Returning HttpStatusCode.BadRequest在我们的测试环境中不起作用,但在m中起作用y dev environment。ajax失败函数从未被命中。有任何线索吗?嗨,Jeff,这很奇怪,看看DevTools,您是否从服务器返回400?可能有人在您的web.config中为它设置了一个覆盖,将重定向返回错误页,以防止用户查看错误页(如YSOD)jQueryReturning HttpStatusCode在我们的测试环境中不起作用,但在我的开发机器上起作用。ajax失败函数从未被命中。有任何线索吗?
.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 />"));
},