2011-08-27 55 views
2

我有一个错误页面,包含所有的布局和页眉,当主视图出现错误时它工作正常,它正确显示错误页面。 但是,当渲染任何部分视图时发生任何错误,它会打破整个用户界面,因为错误页面也有头文件,因此我想了解Global.asax(application_Error),如果请求是针对部分视图将其重定向到PartialError页面,否则将其重定向到Fullerror页面。部分视图的不同错误页面

请让我知道如何才能做到这一点。 谢谢。

+0

您是否通过Ajax请求渲染了这部分内容? –

回答

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参数具体查看。顺便说一句,你可以在这个动作方法中做另一个有用的事情 - 例如记录错误信息。

要使用这个属性,你可以用它装饰你的控制器类:与ListCategories方法

[RedirectOnError] 
public class MyController : Controller { 

    public ViewResult Index() {} 
    public ActionResult Create() {} 

    [RedirectOnError(IsPartialRequest=true)] 
    public PartialViewResult ListCategories() {} 

} 

讲究属性的使用 - 我明确告诉我,这是部分请求。我做这件事的原因很简单 - 路由系统对结果将被用作部分的事实一无所知。