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

2024-06-18

我知道什么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()); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC:我什么时候应该创建自定义视图引擎 的相关文章

随机推荐