ASP.NET MVC:我应该何时创建自定义View Engine

时间:2015-10-24 06:50:52

标签: asp.net asp.net-mvc

我知道View Engine是什么,我更倾向于使用Razor视图引擎,因为它在ASPX引擎上的语法简单。内置视图引擎为您执行几乎所有任务,然后在什么情况下我应该创建自己的视图引擎

我搜索了它,但获得了如何创建它的答案,而不是何时以及为何创建它。

任何人都可以帮我描述实时情景吗?

1 个答案:

答案 0 :(得分:11)

例如,您可以在自定义视图引擎的帮助下更改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 View 发动机。为避免与该实现竞争,我们调用Clear方法删除任何其他方法 查看可能已注册的引擎,然后调用Add方法注册我们的自定义 实现。

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