将没有指定视图的所有操作指向一个具体视图

时间:2012-03-06 02:35:40

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

我正在一个视图上创建基于99%的高级网站。我创建了以下代码,负责将所有没有相应视图的控制器操作指向通用视图:〜/ Views / Shared / UniversalView.cshtml。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    foreach (IViewEngine engine in ViewEngines.Engines)
    {
        if (engine is RazorViewEngine)
        {
            RazorViewEngine razorEngine = (RazorViewEngine)engine;
            var locationFormats = razorEngine.ViewLocationFormats;
            List<string> l = new List<string>(locationFormats);
            l.Add("~/Views/Shared/UniversalView.cshtml");
            razorEngine.ViewLocationFormats = l.ToArray();
        }
    }
}

我很确定会有更好的方法来达到这种效果。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

您可以声明一个BaseController,并且所有控制器都必须继承它。

然后在BaseController中添加一个方法,如

    public ViewResult UniversalView(string viewName="UniversalView")
    {
        return View(viewName);
    }

从其他控制器中,您可以调用此方法而不是传统的View()。 如果您将指定视图名称,则将采用该视图,否则默认为通用视图。

    public ActionResult About()
    {
        return UniversalView();
    }

答案 1 :(得分:0)

我会在所有相关行动中使用该观点:

...
return View("UniversalView");

但如果你真的想走自己的路。看看ExecuteResult方法link并使用它来实现你想要的。