【问题标题】:How do I redirect to the "Error" view page after an AJAX call?如何在 AJAX 调用后重定向到“错误”视图页面?
【发布时间】:2016-03-15 15:18:33
【问题描述】:

我有一个 Ajax 在控制器中调用 HTTP Post Action 方法。

此操作方法正在抛出一个简单的异常消息。

我用我自己的自定义处理程序属性装饰了控制器,其中包含以下内容:

 public override void OnException(ExceptionContext filterContext) {

        if (!filterContext.ExceptionHandled) {
            string actionName = filterContext.RouteData.Values["action"].ToString();
            Type controllerType = filterContext.Controller.GetType();
            var method = controllerType.GetMethod(actionName);
            var returnType = method.ReturnType;
            string controllerName = filterContext.RouteData.Values["controller"].ToString();

            HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

            // redirect on error
            filterContext.Result = new ViewResult {
                ViewName = "Error",
                ViewData = new ViewDataDictionary<HandleErrorInfo>(model)
            };
        }

        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }

上面的问题是由于某种原因,使用 POST 方法,我的页面没有被重定向到错误视图。但是,如果我调用一个用 [HttpGet] 修饰的操作方法,我的重定向将正常工作。

是否可以将 AJAX 方法重定向到错误视图,因为我希望错误视图页面处理所有错误?

【问题讨论】:

  • ajax 的全部目的是保持在同一页面上,并且 ajax 调用不会重定向。
  • 如果动作抛出错误,ajax failure event 将触发,在此编写代码以重定向到错误页面

标签: c# jquery ajax asp.net-mvc


【解决方案1】:

您可以像这样附加全局 ajax 错误处理程序:

 $(function() {
   $(document).ajaxError(function(xhr, props) {
     if (props.status >= 200 && props.status < 300 || props.status === 304) {
       //all is well
     } else {
       alert("error");
       window.location = "/Error/CustomError";
     }
   });
 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2018-04-17
    • 2019-01-24
    • 2019-04-06
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多