该场景是在ASP.NET MVC(4,5)中最大化一个返回局部视图的ajax调用。但有时根据不同情况我可能需要返回错误消息 - 例如为用户显示一些内容..
我目前的做法是这样的。
JS中的:
$.ajax({
url: url,
type: "POST",
data:{ id: id},
success: function (response) {
$("#container").html(response);
},
error: function (er) {
if (er.status == "405")
{// do someth }
else if (er.status == "406")
{// do someth else }
}
});
在控制器中:
public ActionResult ServerMethod(int id)
{
if (id = 0)
return new HttpStatusCodeResult(405);
if (id = 1)
return new HttpStatusCodeResult(406);
//otherwise..
return PartialView("View", Model);
}
但我知道这是一个黑客而不是一个正确的解决方案..有没有更好的方法来做到这一点?
答案 0 :(得分:2)
您可以在失败案件中返回JsonResult
。您可以将所需的任何属性添加到Json。
这样的事情:
public ActionResult ServerMethod(int id)
{
if (id == 0)
{
return Json(new
{
Failed = true,
FailType = "Type1", // Whatever makes sense to you
//OtherRelevantProperty = whatever
});
}
if (id == 1)
{
return Json(new
{
Failed = true,
FailType = "Type2", // Whatever makes sense to you
//OtherRelevantProperty = whatever
});
}
//otherwise..
return PartialView("View", Model);
}
在你的ajax电话中你可以这样做:
$.ajax({
url: url,
type: "POST",
data:{ id: id},
done: function (response) {
if (response.Failed) {
// Switch by response.FailType and use any relevant
// json properties you created in the controller
}
else {
$("#container").html(response);
}
}
});
如果您还需要返回失败的状态代码,可以在返回json之前设置它,例如:
if (id == 0)
{
Response.StatusCode = 500;
return Json(new
{
Failed = true,
FailType = "Type1", // Whatever makes sense to you
//OtherRelevantProperty = whatever
});
}
然后您可以在fail
回调中处理失败的案例:
$.ajax({
url: url,
type: "POST",
data:{ id: id},
done: function (response) {
$("#container").html(response);
},
fail: function(xhr) {
var response = JSON.parse(xhr.responseText);
if (response.Failed) {
// Switch by response.FailType and use any relevant
// json properties you created in the controller
}
}
});
请注意,我还没有对此特定代码进行测试,仅供演示使用。但是,我在我的项目中使用了类似的设置。
答案 1 :(得分:0)
你可以设置
Response.StatusCode = 405;
然后返回视图模型
return PartialView("View", Model);
然后在错误部分跟踪它?