Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 我可以添加到ASP.NET MVC 3中的显示/编辑模板搜索路径吗?_Asp.net Mvc 3_Editortemplates_Mvc Editor Templates - Fatal编程技术网

Asp.net mvc 3 我可以添加到ASP.NET MVC 3中的显示/编辑模板搜索路径吗?

Asp.net mvc 3 我可以添加到ASP.NET MVC 3中的显示/编辑模板搜索路径吗?,asp.net-mvc-3,editortemplates,mvc-editor-templates,Asp.net Mvc 3,Editortemplates,Mvc Editor Templates,我有一套标准的mvc项目模板,我想将其作为外部文件夹保存在我的源代码管理(SVN)中 这意味着我无法将任何特定于项目的文件放在此文件夹中,因为它将提交到错误的位置。。 .. 我的标准模板需要覆盖MVC本身使用的模板,因此它们需要位于MVC期望覆盖模板的位置(例如~/Views/Shared/EditorTemplates) 那么,我可以把我的项目具体的 例如,我应该将它们放在~/Views/Shared/SiteEditorTemplates中,并将路径添加到搜索中吗? 我该怎么做? 还是其他建

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

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

那么,我可以把我的项目具体的

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


谢谢你,Ant

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

好的,明白了

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

因此,我在视图下创建了一条新路径 ~/视图/标准/

然后把我标准的东西扔进去 ~/Views/Standard/EditorTemplates/string.cshtml

现在,在global.asax应用程序_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

您可以只更改现有RazorViewEngine的PartialViewLocationFormats属性,而不是替换RazorView引擎(正如Anthony Johnston所建议的那样)。此代码进入应用程序启动:

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();
}

可能被愚弄,但没有答案。我真的很想对它们进行源代码控制,这样我就可以对它们进行版本和分支等。如果我能进一步了解它们,这将是一个很好的方法go@AnthonyJohnston,NuGet软件包可以进行版本控制,也可以进行源代码控制。是的,但真的吗?我可以右键单击我的文件夹并从VS更新或提交到源代码,使用Nuget,我必须将文件复制回包文件夹,重新生成包,将其上载到Nuget,等待mo,返回到我的其他项目并进行更新。不要把这看作是对NuGet的轻视,我喜欢它,但它不像合适的源代码那样方便代码的开发control@Anthony约翰斯顿,这就是我设置自定义构建步骤的原因,该步骤会自动完成您描述的所有内容,因此我不需要“我不必手动操作。我只需更新源代码并单击build按钮。我可以添加一个构建步骤,将文件从另一个externals目录移动到EditorTemplates目录。。但是,调试时所做的更改将需要生成。。正如@Simon Giles所说,两个地方的代码允许出现问题,只需添加一个位置,而不是替换整个引擎。无论如何,两人都投了赞成票。