gpt4 book ai didi

ajax - 与部分 View 并行的ASP.NET MVC AJAX调用返回错误消息

转载 作者:行者123 更新时间:2023-12-03 08:04:07 24 4
gpt4 key购买 nike

该方案位于ASP.NET MVC(4,5)中,使返回部分 View 的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 }
}
});

在 Controller 中:
public ActionResult ServerMethod(int id)
{
if (id = 0)
return new HttpStatusCodeResult(405);
if (id = 1)
return new HttpStatusCodeResult(406);

//otherwise..
return PartialView("View", Model);
}

但是,我知道这是一个hack,而不是适当的解决方案。是否有更好的方法?

最佳答案

您可以在失败的情况下返回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
}
}
});

请注意,我尚未测试此特定代码,仅用于演示。但是,我在项目中使用了类似的设置。

关于ajax - 与部分 View 并行的ASP.NET MVC AJAX调用返回错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com