在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中文網其他相關文章!