Asp.net mvc 3 我可以添加到ASP.NET MVC 3中的显示/编辑模板搜索路径吗?
我有一套标准的mvc项目模板,我想将其作为外部文件夹保存在我的源代码管理(SVN)中 这意味着我无法将任何特定于项目的文件放在此文件夹中,因为它将提交到错误的位置。。 .. 我的标准模板需要覆盖MVC本身使用的模板,因此它们需要位于MVC期望覆盖模板的位置(例如~/Views/Shared/EditorTemplates) 那么,我可以把我的项目具体的 例如,我应该将它们放在~/Views/Shared/SiteEditorTemplates中,并将路径添加到搜索中吗? 我该怎么做? 还是其他建议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中,并将路径添加到搜索中吗? 我该怎么做? 还是其他建
谢谢你,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所说,两个地方的代码允许出现问题,只需添加一个位置,而不是替换整个引擎。无论如何,两人都投了赞成票。