kir*_*ran 10 asp.net asp.net-mvc
我知道是什么View Engine,我更喜欢使用Razor视图引擎,因为它在ASPX引擎上的语法简单.内置视图引擎为您执行几乎所有任务,然后在什么情况下我应该创建自己的视图引擎,
我搜索了它,但获得了如何创建它的答案,而不是何时以及为何创建它.
任何人都可以帮我描述实时情景吗?
Far*_*yev 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"
};
Run Code Online (Sandbox Code Playgroud)
然后将例如LayoutsPartialViews文件Shared夹添加到文件夹并添加部分视图,例如仅用于布局.并添加例如ColorfuleHeader.cshtml该位置.并尝试通过以下方式呈现该视图:
@Html.Partial("ColorfulHeader");
Run Code Online (Sandbox Code Playgroud)
这样的例外将被抛弃:
找不到局部视图'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",
};
}
}
Run Code Online (Sandbox Code Playgroud)
此外,请记住,动作调用者依次转到每个视图引擎以查看是否可以找到视图.当我们能够将视图添加到集合时,它将包含标准的Razor View Engine.为避免与该实现竞争,我们调用该Clear方法删除可能已注册的任何其他视图引擎,然后调用该Add方法来注册我们的自定义实现.
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomLocationViewEngine());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5028 次 |
| 最近记录: |