更改某个控制器的视图路径的最简单方法

时间:2011-06-20 06:31:38

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

我有一个名为BaseController的Controller,Controller1和Controller2继承自它。

这些控制器的所有视图都在〜/ Views / Base /之下,原因是Controller1和2执行完全相同的操作,但在某些覆盖操作中具有自定义属性。

我希望能够指向〜/ Views / Base作为在Controller1和Controller2中查找视图的位置。现在我可以这样做,而不必按照Dale在这篇文章中的解决方案实现我自己的ViewLocator Views in separate assemblies in ASP.NET MVC

我宁愿不把所有这些视图都抛到〜/ Views / Shared中,因为除了这两个控制器之外,它们并没有真正共享。

1 个答案:

答案 0 :(得分:2)

您可以编写自定义视图引擎,以便在搜索列表中添加此新位置:

public class MyViewEngine : RazorViewEngine // WebFormViewEngine - if you are using WebForms
{
    public MyViewEngine()
    {
        ViewLocationFormats = base.ViewLocationFormats.Union(new[] 
        {
            "~/Views/Base/{0}.cshtml",
            "~/Views/Base/{0}.vbhtml",
            "~/Views/Base/{0}.aspx",
            "~/Views/Base/{0}.ascx",
        }).ToArray();
    }
}

将在Application_Start注册:

ViewEngines.Engines.Add(new MyViewEngine());