【问题标题】:different error page for Partial View部分视图的不同错误页面
【发布时间】:2011-08-27 20:37:33
【问题描述】:
我有一个包含所有布局和标题的错误页面,当主视图上发生错误时它可以正常工作,它会正确显示错误页面。
但是当渲染任何局部视图时出现任何错误,它会破坏整个 UI,因为错误页面也有 Header,
所以我想知道在 Global.asax (application_Error) 内部,如果请求是针对局部视图,则将其重定向到 PartialError 页面,否则将其重定向到 Fullerror 页面。
请让我知道如何实现这一目标。
谢谢。
【问题讨论】:
标签:
asp.net-mvc
model-view-controller
【解决方案1】:
我建议使用过滤器属性。你可以实现这样的东西:
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 方法的属性使用 - 我明确告诉这是部分请求。我这样做的原因很简单——路由系统对结果将被用作部分的事实一无所知。