【问题标题】:C# mvc4 ViewResult how to set controller and area?C# mvc4 ViewResult如何设置控制器和区域?
【发布时间】:2016-09-29 21:37:24
【问题描述】:
public override void OnException(ExceptionContext filterContext) {

    string controllerName = (string) filterContext.RouteData.Values["controller"];
    string actionName = (string) filterContext.RouteData.Values["action"];
    // Preserve old ViewData here
    var viewData = new ViewDataDictionary<HandleErrorInfo>(filterContext.Controller.ViewData); 
    // Set the Exception information model here
    viewData.Model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
    filterContext.Result = new ViewResult { ViewName = this.View, MasterName = this.Master, ViewData = viewData, TempData = filterContext.Controller.TempData };
    filterContext.ExceptionHandled = true;
    filterContext.HttpContext.Response.Clear();
    //filterContext.HttpContext.Response.StatusCode = 500;
    filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;

但我得到错误:

{System.InvalidOperationException: The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched:
xxxxxxxx

但我的位置不是搜索。错误方法在 MyErrorController 中。如何显式设置控制器 (MyErrorController)

我的路径必须是 ~/Areas/Public/Views/MyError/Error.ascx

"area" -> "Public"
"controller", "MyError"
"action" -> "Error";

【问题讨论】:

  • 你写的是ActionFilter吗?它没有定义View 属性。
  • 不,它是 ExceptionContext 。我更新了我的问题

标签: c# asp.net-mvc-4


【解决方案1】:

在设置filterContext.Result之前,尝试添加以下几行:

filterContext.RouteData.DataTokens["area"] = "Public";
filterContext.RouteData.Values["controller"] = "MyError";
filterContext.RouteData.Values["action"] = "Error";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2011-09-22
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多