【问题标题】:How to redirect to another view from catch block using MVC如何使用 MVC 从 catch 块重定向到另一个视图
【发布时间】:2014-01-17 10:29:27
【问题描述】:

我正在从 AJAX 调用一个函数

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

家庭控制器:

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

在 catch 块中我也试过这个:

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

我有一个这样的 ErrorPage 控制器

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你混淆了两个概念:

    1. AJAX 调用正在使用 REST 接口
    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 呈现错误响应,而不是将浏览器重定向到“错误页面”。原因是重定向会改变地址栏中的地址并将其自身添加到历史记录中。例如,如果您的用户想要通过单击“刷新”按钮重试,浏览器将不会重做之前导致错误的相同操作。而是它将简单地重新加载错误页面,即使原来的用例现在可以工作。)

    【讨论】:

      【解决方案2】:

      您能否不返回错误并按照here 所示处理失败(参见页面上最后一个示例的第二个)?然后,您将使用 this 之类的内容进行重定向。

      直接的 RedirectToAction 应该可以工作。假设您的目标是正确的控制器,也许您可​​以尝试在 try catch 中设置一个标志并在 catch 之外重定向。

      我倾向于不使用 RedirectToRouteResult,但是关于何时使用它的问题已回答here

      很抱歉,这不是一个“这样做,一切都会好起来”的答案,但希望它能帮助您朝着正确的方向前进。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        相关资源
        最近更新 更多