我可以添加到ASP.NET MVC 3中的Display / EditorTemplates搜索路径吗?

时间:2011-04-07 13:22:56

标签: asp.net-mvc-3 editortemplates mvc-editor-templates

我有一套标准的模板用于我的mvc项目,我希望将其保存为源代码管理(SVN)中的外部文件夹

这意味着我无法将任何项目特定文件放在此文件夹中,因为它将被提交到错误的位置。 ..我的标准模板需要覆盖MVC本身使用的模板,因此它们需要位于MVC期望覆盖模板的位置(例如〜/ Views / Shared / EditorTemplates)

那我在哪里可以把我的项目特定的?

例如,我应该将它们放在〜/ Views / Shared / SiteEditorTemplates中,并添加搜索路径吗? 我该怎么办? 还是其他建议?

谢谢你,Ant

3 个答案:

答案 0 :(得分:20)

好的,明白了

mvc中的编辑器代码在引擎的PartialViewLocationFormats中查找编辑器,将DisplayTemplates或EditorTemplates添加到路径中。

所以,我在视图下创建了一条新路径 〜/查看/标准/

把我的标准东西放在那里 〜/查看/标准/ EditorTemplates / string.cshtml

现在,在global.asax Application_Start

中注册引擎中的新路径
protected void Application_Start() {
    AreaRegistration.RegisterAllAreas();

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

    ViewEngines.Engines.Clear();
    var viewEngine = new RazorViewEngine {
        PartialViewLocationFormats = new[]
        {
            "~/Views/{1}/{0}.cshtml",
            "~/Views/Shared/{0}.cshtml",
            "~/Views/Standard/{0}.cshtml"
        }
    };

    ViewEngines.Engines.Add(viewEngine);
}

请注意,这将摆脱webforms视图引擎和vb路径,但我仍然不需要它们

这允许我在SVN中使用〜/ Views / Standard的外部,并在必要时覆盖项目内容 - rah!

答案 1 :(得分:4)

我个人将特定模板外部化为NuGet包,每次启动一个新的ASP.NET MVC项目时,我只需导入这个NuGet包,然后在各自的位置(~/Views/Shared/EditorTemplates)部署模板,以覆盖默认的。

答案 2 :(得分:3)

您可以改变现有的RazorViewEngine的PartialViewLocationFormats属性,而不是替换RazorView引擎(如Anthony Johnston所建议的那样)。此代码位于Application_Start:

System.Web.Mvc.RazorViewEngine rve = (RazorViewEngine)ViewEngines.Engines
  .Where(e=>e.GetType()==typeof(RazorViewEngine))
  .FirstOrDefault();

string[] additionalPartialViewLocations = new[] { 
  "~/Views/[YourCustomPathHere]"
};

if(rve!=null)
{
  rve.PartialViewLocationFormats = rve.PartialViewLocationFormats
    .Union( additionalPartialViewLocations )
    .ToArray();
}