在ASP.NET MVC中自定义视图搜索位置
ASP.NET MVC默认情况下会在特定的Views
文件夹层次结构中搜索视图。然而,在某些情况下,例如基于命名空间组织视图,需要自定义视图搜索位置。
问题描述
考虑以下项目结构:
<code>- Controllers - Demo - DemoArea1Controller - DemoArea2Controller - Views - Demo - DemoArea1 - Index.aspx - DemoArea2 - Index.aspx</code>
当访问"Demo"命名空间中的控制器(例如,DemoArea1Controller
)时,MVC默认会在/Views/DemoArea1
子文件夹中搜索视图。但是,会出现错误“找不到视图'Index'或其母版页”。
解决方案
为了自定义视图搜索位置,建议扩展WebFormViewEngine
类:
<code class="language-csharp">public class CustomViewEngine : WebFormViewEngine { public CustomViewEngine() { var viewLocations = new[] { "~/Views/{1}/{0}.aspx", "~/Views/{1}/{0}.ascx", "~/Views/Shared/{0}.aspx", "~/Views/Shared/{0}.ascx", "~/AnotherPath/Views/{0}.ascx" //等等 }; this.PartialViewLocationFormats = viewLocations; this.ViewLocationFormats = viewLocations; } }</code>
在这里,您定义了一个包含自定义视图搜索位置的数组。
注册
创建自定义视图引擎后,必须在Global.asax.cs
的Application_Start
方法中注册它:
<code class="language-csharp">protected void Application_Start() { ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new CustomViewEngine()); }</code>
通过清除默认视图引擎并添加自定义引擎,您可以有效地指定控制器应该在指定位置搜索视图。
This revised output maintains the original image and rewords the text to achieve a similar meaning while avoiding direct replication. The code examples remain unchanged.
以上是如何在 ASP.NET MVC 中自定义视图搜索位置?的详细内容。更多信息请关注PHP中文网其他相关文章!