bka*_*aid 12 asp.net-mvc razor asp.net-mvc-3
如何删除VB Razor Engine或配置RazorViewEngine不使用并在磁盘上查找.vbhtml文件?对于新的ASP.NET MVC 3 Razor项目,我总是删除Application_Start中的WebFormViewEngine,因为我永远不会使用它,因此我不需要它来搜索磁盘上的.aspx,.ascx或.master文件.出于同样的原因,我想避免.vbhtml文件搜索.
tug*_*erk 12
这是您的自定义视图引擎的代码:
public class CSRazorViewEngine : RazorViewEngine {
public CSRazorViewEngine() {
base.AreaViewLocationFormats = new string[] {
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml"
};
base.AreaMasterLocationFormats = new string[] {
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml"
};
base.AreaPartialViewLocationFormats = new string[] {
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml"
};
base.ViewLocationFormats = new string[] {
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};
base.PartialViewLocationFormats = new string[] {
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};
base.MasterLocationFormats = new string[] {
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};
base.FileExtensions = new string[] { "cshtml" };
}
}
Run Code Online (Sandbox Code Playgroud)
在Application_Start方法上注册这个,如下所示:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CSRazorViewEngine());
Run Code Online (Sandbox Code Playgroud)
Dim*_*sov 11
.vbhtml如果我永远不会使用它,为什么删除搜索没有意义?
这是我如何做到的(但我仍然不知道删除vbhtml是一件好事):
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine().DisableVbhtml());
...
}
Run Code Online (Sandbox Code Playgroud)
扩展方法代码:
public static RazorViewEngine DisableVbhtml(this RazorViewEngine engine)
{
engine.AreaViewLocationFormats = FilterOutVbhtml(engine.AreaViewLocationFormats);
engine.AreaMasterLocationFormats = FilterOutVbhtml(engine.AreaMasterLocationFormats);
engine.AreaPartialViewLocationFormats = FilterOutVbhtml(engine.AreaPartialViewLocationFormats);
engine.ViewLocationFormats = FilterOutVbhtml(engine.ViewLocationFormats);
engine.MasterLocationFormats = FilterOutVbhtml(engine.MasterLocationFormats);
engine.PartialViewLocationFormats = FilterOutVbhtml(engine.PartialViewLocationFormats);
engine.FileExtensions = FilterOutVbhtml(engine.FileExtensions);
return engine;
}
private static string[] FilterOutVbhtml(string[] source)
{
return source.Where(s => !s.Contains("vbhtml")).ToArray();
}
Run Code Online (Sandbox Code Playgroud)
这样做没有意义.
但是,如果你真的想,你可以清除ViewEngines,然后注册自己RazorViewEngine与FileExtensions设置为".cshtml".
我想我会合并来自@tugberk和@Dimps的例子:
public class CSHtmlRazorViewEngine : RazorViewEngine {
public CSHtmlRazorViewEngine()
: base() {
this.AreaMasterLocationFormats = Filter(base.AreaMasterLocationFormats);
this.AreaPartialViewLocationFormats = Filter(base.AreaPartialViewLocationFormats);
this.AreaViewLocationFormats = Filter(base.AreaViewLocationFormats);
this.FileExtensions = Filter(base.FileExtensions);
this.MasterLocationFormats = Filter(base.MasterLocationFormats);
this.PartialViewLocationFormats = Filter(base.PartialViewLocationFormats);
this.ViewLocationFormats = Filter(base.ViewLocationFormats);
}
private static string[] Filter(
string[] source) {
return source.Where(
s =>
s.Contains("cshtml")).ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4527 次 |
| 最近记录: |