ASP.什么时候我应该创建自定义视图引擎



我知道View Engine是什么,我更喜欢使用Razor视图引擎,因为它比ASPX引擎语法简单。内置的视图引擎为你执行几乎所有的任务,那么在什么情况下我应该创建我自己的视图引擎,

我谷歌它,但得到的答案是如何创建它,而不是何时和为什么创建它。

谁能帮我描述一下实时场景?

例如,你可以在自定义视图引擎的帮助下改变Razor搜索视图文件的位置。

通常,在MVC中,这些位置是搜索局部视图的:

 // Part of the RazorViewEngine implementation from the Asp.net MVC source code
 PartialViewLocationFormats = new[]
        {
            "~/Views/{1}/{0}.cshtml",
            "~/Views/{1}/{0}.vbhtml",
            "~/Views/Shared/{0}.cshtml",
            "~/Views/Shared/{0}.vbhtml"
        };

然后添加例如LayoutsPartialViews文件夹到Shared文件夹,并添加部分视图,例如仅用于布局。并添加例如ColorfuleHeader.cshtml到该位置。然后尝试通过这个来渲染这个视图:

  @Html.Partial("ColorfulHeader");

这样的异常将被抛出:

没有找到部分视图'ColorfulHeader'或没有视图引擎支持搜索位置。以下地点是搜索…:

所以我们必须将这个位置添加到搜索位置中。为此,我们必须创建自定义视图引擎:

 public class CustomLocationViewEngine : RazorViewEngine
    {
        public CustomLocationViewEngine()
        {
            PartialViewLocationFormats = new[] {
                "~/Views/{1}/{0}.cshtml",
                "~/Views/{1}/{0}.vbhtml",
                "~/Views/Shared/{0}.cshtml",
                "~/Views/Shared/{0}.vbhtml",
                "~/Views/Shared/LayoutsPartialViews/{0}.cshtml",
                "~/Views/Shared/LayoutsPartialViews/{0}.vbhtml",
            };
        }
    }

另外,请记住操作调用程序依次访问每个视图引擎,以查看是否可以找到视图。通过当我们能够将视图添加到集合中时,它就已经包含了标准的Razor视图引擎。为了避免与该实现竞争,我们调用Clear方法来删除任何其他实现查看可能已注册的引擎,然后调用Add方法来注册我们的自定义实现。

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new CustomLocationViewEngine()); 

最新更新