仅为C#注册RazorViewEngine(仅适用于.cshtml文件)

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扩展名的文件仍然让我变得无法形容.

问题是:我们怎样才能摆脱它们?

Ahm*_*mad 6

我的建议是覆盖RazorViewEngine以下内容的定义,仅包含cshtml文件.

  • AreaViewLocationFormats
  • AreaMasterLocationFormats
  • AreaPartialViewLocationFormats
  • ViewLocationFormats
  • MasterLocationFormats
  • PartialViewLocationFormats
  • FileExtensions

一个简短的例子:

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)