我有一个包含所有布局和标题的错误页面,当主视图出错时它可以正常工作,它会正确显示错误页面。 但是当渲染任何局部视图时发生任何错误时,它会破坏整个UI,因为错误页面也有Header,
所以我想在Global.asax(application_Error)中知道,如果请求是部分视图,则将其重定向到PartialError页面,否则将其重定向到Fullerror页面。
请让我知道如何实现这一目标。 谢谢。
答案 0 :(得分:1)
我建议使用filter属性。你可以实现这样的东西:
public class RedirectOnErrorAttribute : FilterAttribute, IExceptionFilter {
bool IsPartialRequest = false;
public void OnException(ExceptionContext filterContext) {
if(filterContext.ExceptionHandled) return;
/*then you can redirect to a specific page or to, for example,
special error handling controller*/
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "HandleError", isPartialError = IsPartialRequest }));
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
}
}
在HandleError
操作方法中的错误处理控制器中,您可以根据isPartialError
参数返回特定的视图。顺便说一句,你可以在这个动作方法中做另一个有用的事情 - 例如以某种方式记录错误信息。
要使用此属性,您可以使用它来装饰控制器类:
[RedirectOnError]
public class MyController : Controller {
public ViewResult Index () {}
public ActionResult Create() {}
[RedirectOnError(IsPartialRequest=true)]
public PartialViewResult ListCategories() {}
}
注意ListCategories
方法的属性用法 - 我明确告诉这是部分请求。我这么做的原因很简单 - 路由系统对结果将被用作部分的事实一无所知。