部分视图的不同错误页面

时间:2011-08-27 20:37:33

标签: asp.net-mvc model-view-controller

我有一个包含所有布局和标题的错误页面,当主视图出错时它可以正常工作,它会正确显示错误页面。 但是当渲染任何局部视图时发生任何错误时,它会破坏整个UI,因为错误页面也有Header,

所以我想在Global.asax(application_Error)中知道,如果请求是部分视图,则将其重定向到PartialError页面,否则将其重定向到Fullerror页面。

请让我知道如何实现这一目标。 谢谢。

1 个答案:

答案 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方法的属性用法 - 我明确告诉这是部分请求。我这么做的原因很简单 - 路由系统对结果将被用作部分的事实一无所知。