91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET中怎么自定義View視圖文件查找邏輯

發布時間:2021-07-15 14:43:53 來源:億速云 閱讀:122 作者:Leah 欄目:移動開發

這期內容當中小編將會給大家帶來有關ASP.NET中怎么自定義View視圖文件查找邏輯,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

之前MVC5和之前的版本中,我們要想對View文件的路徑進行控制的話,則必須要對IViewEngine接口的FindPartialView或FindView方法進行重寫,所有的視圖引擎都繼承于該IViewEngine接口,比如默認的RazorViewEngine。但新版本MVC6中,對視圖文件的路徑方式卻不太一樣了,目前有兩種方式,一種是通過RazorViewEngine,另外一種是通過新特性IViewLocationExpander接口。
通過RazorViewEngine來控制View路徑

在新版的RazorViewEngine中,該類提供了兩個虛屬性(AreaViewLocationFormats和ViewLocationFormats),可以用于重寫控制,而不必再對FindPartialView或FindView方法進行重寫,示例如下:

public class ThemeViewEngine : RazorViewEngine { public ThemeViewEngine(IRazorPageFactory pageFactory, IRazorViewFactory viewFactory, IViewLocationExpanderProvider viewLocationExpanderProvider, IViewLocationCache viewLocationCache) : base(pageFactory, viewFactory, viewLocationExpanderProvider, viewLocationCache) { }  public override IEnumerable<string> AreaViewLocationFormats { get { var value = new Random().Next(0, 1); var theme = value == 0 ? "Theme1" : "Theme2"; // 可通過其它條件,設置皮膚的種類 return base.AreaViewLocationFormats.Select(f => f.Replace("/Views/", "/Views/" + theme + "/")); } }  public override IEnumerable<string> ViewLocationFormats { get {


var value = new Random().Next(0, 1);
var theme = value == 0 ? "Theme1" : "Theme2";  // 可通過其它條件,設置皮膚的種類
return base.ViewLocationFormats.Select(f => f.Replace("/Views/", "/Views/" + theme + "/"));

} } }  然后,通過修改MVcOptions的實例屬性ViewEngines即可完成對視圖引擎的替換,代碼如下:  services.AddMvc().Configure<MvcOptions>(options => { options.ViewEngines.Clear(); options.ViewEngines.Add(typeof(ThemeViewEngine)); });

這樣,系統在查找視圖文件的時候,就會按照新注冊的ThemeViewEngine的邏輯來執行。
通過IViewLocationExpander來控制View路徑

在MVC6中,微軟還提供了另外一種新的方式來控制View文件的路徑,那就是IViewLocationExpander接口,通過實現該接口即可實現自定義邏輯,并且也可以使用相關的上下文對象。示例如下:

public class ThemeViewLocationExpander : IViewLocationExpander { public void PopulateValues(ViewLocationExpanderContext context) { var value = new Random().Next(0, 1); var theme = value == 0 ? "Theme1" : "Theme2"; context.Values["theme"] = theme; }  public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) { return viewLocations.Select(f => f.Replace("/Views/", "/Views/" + context.Values["theme"] + "/")); } }

在上述自定義的IViewLocationExpander中,實現了2個方法分別是PopulateValues和ExpandViewLocations,PopulateValues方法可以讓我們想ViewLocationExpanderContext上下文中添加響應的鍵值對以便后續使用,通過,我們可以利用通過該上下文對象,來查找ActionContext和HttpContext對象,以便利用這些對象做響應的判斷操作;而ExpandViewLocations方法,只會在沒有View緩存或在View緩存里找不到對應key的View文件時才會調用該方法,在該方法內,我們可以動態返回視圖的位置。

***,我們在Startup.cs里通過修改RazorViewEngineOptions實例對象的ViewLocationExpanders屬性,來實現注冊目的,代碼如下:

services.Configure<RazorViewEngineOptions>(options => { options.ViewLocationExpanders.Add(typeof(ThemViewLocationExpander)); });

上述就是小編為大家分享的ASP.NET中怎么自定義View視圖文件查找邏輯了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涡阳县| 腾冲县| 丰顺县| 繁峙县| 江阴市| 溧水县| 佛坪县| 鄱阳县| 莫力| 开封县| 屯留县| 邵阳市| 房产| 修水县| 梓潼县| 安新县| 枝江市| 白朗县| 开鲁县| 江西省| 桂平市| 兴仁县| 乌苏市| 历史| 三河市| 沁阳市| 万载县| 信宜市| 樟树市| 扬中市| 阜平县| 洛川县| 龙山县| 瓦房店市| 苏尼特左旗| 外汇| 石屏县| 濮阳县| 肥乡县| 潢川县| 福海县|