我正在从 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
我错过了什么?我对此很陌生,所以希望有一个我找不到的简单答案......
最佳答案
您混淆了两个概念:
- AJAX 调用使用的 REST 接口(interface)
- 您想要导航至错误页面的 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/