我只在我的一个ASP.NET MVC 3应用程序上使用RazorViewEngine
,并在我的 Global.asax.cs的Application_Start
方法中使用以下代码清除了Web窗体视图引擎档案
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
我决定看到一些坚实的东西,以便我对这两行代码的努力感到满意,并尝试渲染一个不存在的局部视图,我得到了这个结果:
找不到部分视图'_RortortMapPartialView'或没有视图 引擎支持搜索的位置。以下地点是 搜索: 〜/地区/住宿/浏览/度假/ _ResortMapPartialView.cshtml 〜/地区/住宿/浏览/度假/ _ResortMapPartialView.vbhtml 〜/地区/住宿/查看/共享/ _ResortMapPartialView.cshtml 〜/地区/住宿/查看/共享/ _ResortMapPartialView.vbhtml 〜/查看/度假/ _ResortMapPartialView.cshtml 〜/查看/度假/ _ResortMapPartialView.vbhtml 〜/查看/共享/ _ResortMapPartialView.cshtml 〜/查看/共享/ _ResortMapPartialView.vbhtml
看起来好一点。现在它寻找比以前更少的物品。但是,.vbhtml
扩展名的文件仍然让我变得不合格。
问题在于:我们如何摆脱它们?
答案 0 :(得分:6)
我的建议是覆盖以下RazorViewEngine
定义,仅包含cshtml
个文件。
一个简短的例子:
public class CSHtmlViewEngine: RazorViewEngine
{
public CSHtmlViewEngine()
{
base.AreaViewLocationFormats=
new string[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};
base.AreaPartialViewLocationFormats =
new string[]
{
"~/Areas/{2}/Views/{1}/{0}.cshtml",
"~/Areas/{2}/Views/Shared/{0}.cshtml",
};
// All the other LocationFormats listed above will also need to be amended
// Don't forget the FileExtensions array
}
}
请参阅我的回答talks about overriding these values。同样的原则适用。您需要在CSHtmlViewEngine
方法中注册此修改过的ViewEngine(ApplicationStart
)
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CSHtmlViewEngine());
答案 1 :(得分:0)
您可以直接更改现有的RazorViewEngine的PartialViewLocationFormats属性,而不是对RazorViewEngine进行子类化或直接替换它。此代码位于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();
}