15

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

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

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

例如,我是否应该将它们放在 ~/Views/Shared/SiteEditorTemplates 中,然后将路径添加到搜索中?我该怎么做?还是其他建议?

谢谢你,蚂蚁

4

3 回答 3

20

好的,我知道了

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

所以,我在视图 ~/Views/Standard/ 下创建了一个新路径

并把我的标准东西放在那里~/Views/Standard/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 提供一个外部文件,并在必要时覆盖项目内容 - 啊!

于 2011-04-07T14:42:15.390 回答
4

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

于 2011-04-07T13:28:54.603 回答
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();
}
于 2013-09-09T17:25:42.373 回答