jquery - 如何使用 MVC 从 catch block 重定向到另一个 View

标签 jquery asp.net-mvc asp.net-mvc-3 exception handleerror

我正在从 AJAX 调用函数

$.ajax({
         type: "POST",
         url: "GetOneApple",
         data: {},
         dataType: "json",
         success: function (data) {}
});

家庭 Controller :

[HttpPost]
public ActionResult GetOneApple()
{
     try
       {
      ..snip
       }
     catch (Exception e)
       {
           return RedirectToAction("ErrorPage", "Home");
       }
}

在 catch block 中我也尝试过:

return new RedirectToRouteResult(new RouteValueDictionary {
    { "Controller", "Home" }, 
    { "Action", "ErrorPage" }
});

我有一个像这样的 ErrorPage Controller

 public ActionResult ErrorPage()
        {
            return View();
        }

正如我提到的,
如果 try block 中发生任何错误,它必须重定向到 ErrorPage 但页面没有重定向,使用firebug,我从 Controller 的AjaxResponse中获取了“ErrorPage”html,即使它没有重定向到“ErrorPage”view

我错过了什么?我对此很陌生,所以希望有一个我找不到的简单答案......

最佳答案

您混淆了两个概念:

  1. AJAX 调用使用的 REST 接口(interface)
  2. 您想要导航至错误页面的 Web 应用程序。

您的 REST API 应始终响应请求,切勿要求客户端重定向。相反,如果出现错误,请以 JSON 格式返回错误详细信息,例如

{ status: "error", message: "Error so and so" }

以及错误 HTTP 代码。您可以像这样实现这一点:

catch (Exception ex)
{
    Response.StatusCode = 500; // put a reasonable code here
    return Json(new { status = "error", message = ex.Message });
}

在 JavaScript 中,您可以使用 AJAX 错误回调来“捕获”该错误。然后你的 JavaScript 决定下一步要做什么。如果您想向用户显示错误,可以使用 JavaScript 将消息呈现为 HTML。

(备注:只有当整个页面请求无效时,您通常才会将浏览器重定向到错误页面。如果您位于有效页面上,并且只有一个 AJAX 调用失败,您不会希望卸载有效页面,并且转到错误页面 URL(?)。即使您的浏览器发出失败的页面请求,我通常更喜欢从该 URL 呈现错误响应,而不是将浏览器重定向到“错误页面”。原因是重定向更改地址栏中的地址并将其自身添加到历史记录中。例如,如果您的用户想通过单击“刷新”按钮重试,则浏览器不会重做之前导致错误的相同操作。相反,它即使原始用例现在可能可以工作,也会简单地重新加载错误页面。)

关于jquery - 如何使用 MVC 从 catch block 重定向到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21183565/

相关文章:

Jquery 移动和动态链接

javascript - jQuery - 如果选择选项值等于数据添加类

javascript - 在php代码中实现倒计时js倒计时

.net - MVC3 客户端对集合的验证,至少有一个元素具有值

javascript - 防止同一请求多次完成

javascript - 回调事件不起作用 - 使用 Owl Carousel

c# - ASP.NET MVC4 如何跨系统存储变量?

c# - 访问 select 中的透明标识符会引发它不是从范围引用的

asp.net-mvc - Entity Framework 更新无跟踪实体

asp.net-mvc - MVC3 分页,每页项目数