tug*_*erk 2 asp.net asp.net-mvc global-asax razor asp.net-mvc-3
我只RazorViewEngine在我的一个ASP.NET MVC 3应用程序上使用,并使用以下代码在Application_Start我的Global.asax.cs文件的方法中清除了Web窗体视图引擎
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
Run Code Online (Sandbox Code Playgroud)
我决定看到一些可靠的东西,以便我对这两行代码的努力感到满意,并尝试渲染一个不存在的局部视图,我得到了这个结果:
未找到局部视图"_ResortMapPartialView"或视图引擎不支持搜索的位置.搜索了以下位置:〜/区域/住宿/视图/度假村/ _ResortMapPartialView.cshtml~/Areas/Accommodation/Views/resort/_RortortMapPartialView.vbhtml~/Areas/Accommodation/Views/Shared/_ResortMapPartialView.cshtml~/Areas/Accommodation /Views/Shared/_ResortMapPartialView.vbhtml~/Views/resort/_RortortMapPartialView.cshtml~/Views/resort/_RortortMapPartialView.vbhtml~/Views/Shared/_RortortMapPartialView.cshtml~/Views/Shared/_RortortMapPartialView.vbhtml
它看起来好一点.现在它寻找比以前更少的物品.但是带有.vbhtml扩展名的文件仍然让我变得无法形容.
问题是:我们怎样才能摆脱它们?
我的建议是覆盖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
}
Run Code Online (Sandbox Code Playgroud)
}
请参阅我的回答,其中讨论了重写这些值.同样的原则适用.您需要注册这个修改视图引擎(CSHtmlViewEngine在)ApplicationStart方法
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CSHtmlViewEngine());
Run Code Online (Sandbox Code Playgroud)