ASP.NET MVC AJAX调用与Partial View并行返回Error Message

时间:2016-10-26 11:10:45

标签: ajax asp.net-mvc error-handling

该场景是在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);
}   

但我知道这是一个黑客而不是一个正确的解决方案..有没有更好的方法来做到这一点?

2 个答案:

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

然后在错误部分跟踪它?