【问题标题】:Return single view on every controller action in asp.net mvc3在 asp.net mvc3 中返回每个控制器操作的单个视图
【发布时间】:2013-04-01 10:22:54
【问题描述】:

我想为 asp.net mvc3 中的每个控制器操作请求返回相同的视图。实现此目的的最佳方法是什么。我不想在每个控制器操作中都写视图名称

【问题讨论】:

  • 我很想知道这种方法在现实生活中的应用。
  • 您是否对答案感兴趣,或者您只是无意中提出问题?

标签: asp.net-mvc-3


【解决方案1】:

你可以使用

Return RedirecToAction(ActionName)

所以你可能有类似的东西

<ActionName("PageX")> _
Function PageX() As ActionResult
  Return RedirectToAction("CommonView")
End Function

<ActionName("PageY")> _
Function PageY() As ActionResult
  Return RedirectToAction("CommonView")
End Function

<ActionName("PageZ")> _
Function PageZ() As ActionResult
  Return RedirectToAction("CommonView")
End Function

<ActionName("CommonView")> _
Function CommonView() As ActionResult
  Return View()
End Function

【讨论】:

    【解决方案2】:

    如果您希望它用于单个控制器,则在此控制器中覆盖 OnActionExecuted

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var viewResult = filterContext.Result as ViewResultBase;
    
        if (viewResult != null)
        {
            viewResult.ViewName = "view-name";
        }
    
        base.OnActionExecuted(filterContext);
    }
    

    如果您希望整个应用都使用它,请覆盖 ViewEngine:

    public class RazorViewEngineViewMobileSupport : RazorViewEngine
    {
        public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
        {
            return base.FindPartialView(controllerContext, "view-name", useCache);
        }
    
        public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
        {
            return base.FindView(controllerContext, "view-name", masterName, useCache);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多