【问题标题】:different error page for Partial View部分视图的不同错误页面
【发布时间】:2011-08-27 20:37:33
【问题描述】:

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

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

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

【问题讨论】:

  • 你是通过 Ajax 请求渲染这个部分吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多