0

我有CustomHandleErrorAttribute我覆盖OnException这样的方法的地方:

    public override void OnException(ExceptionContext filterContext) {
        if (!filterContext.ExceptionHandled) {
            if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") {
                filterContext.Result = new JsonResult {
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    Data = new {
                        error = true,
                        message = filterContext.Exception.Message
                    }
                };
            }
            else {
                var controllerName = (string)filterContext.RouteData.Values["controller"];
                var actionName = (string)filterContext.RouteData.Values["action"];
                var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

                filterContext.Result = new ViewResult {
                    ViewName = View,
                    MasterName = Master,
                    ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                    TempData = filterContext.Controller.TempData
                };
            }
        }
    }

我可以通过 AJAX 请求获取异常,而我Action正在处理。

我有一个问题,当抛出异常时(例如在页面上/Customers/Customer/1),我有yellow screenServer Error in '/' Application但我想显示我的视图并传递给ViewData有关异常处理的信息,然后在此页面上显示(不要重定向到CustomErrorPage或其他任何地方)。

所以: 1. 如果我有异常 - 只显示异常信息而没有表单;2.如果我没有异常显示表格;

是否有可能,或者抛出的异常无法继续处理操作并显示相同的视图?

谢谢。

4

1 回答 1

1

当您允许异常一直冒泡到 IIS 级别而不被捕获时,您会得到黄屏死机。这将成为 500 服务器错误,如果您设置了一个,您将看到黄屏或 500 错误页面。没有其他可以显示的内容,因为无法从错误中恢复。

加载相同视图的唯一方法是捕获每个异常并以某种方式对其进行响应。这可能会在视图或其他内容上为用户生成错误消息,但由您决定捕获异常并做出响应,IIS 不会为您执行此操作。

于 2013-10-25T15:00:29.090 回答