亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

解讀ASP.NET 5 & MVC6系列教程(16):自定義View視圖文件查找邏輯

2024-07-10 13:30:52
字體:
來源:轉載
供稿:網友

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

通過RazorViewEngine來控制View路徑

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

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個方法分別是PopulateValuesExpandViewLocations,PopulateValues方法可以讓我們想ViewLocationExpanderContext上下文中添加響應的鍵值對以便后續使用,通過,我們可以利用通過該上下文對象,來查找ActionContextHttpContext對象,以便利用這些對象做響應的判斷操作;而ExpandViewLocations方法,只會在沒有View緩存或在View緩存里找不到對應key的View文件時才會調用該方法,在該方法內,我們可以動態返回視圖的位置。

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

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


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线亚洲一区| 精品欧美aⅴ在线网站| 欧美成人午夜影院| 亚洲国产精品悠悠久久琪琪| 一区二区三区高清国产| 992tv在线成人免费观看| 欧美尤物巨大精品爽| 亚洲精品中文字幕av| 91精品国产91久久久久| 国产丝袜精品视频| 欧洲s码亚洲m码精品一区| 成人精品aaaa网站| 久久理论片午夜琪琪电影网| 久久精品99无色码中文字幕| 欧美精品午夜视频| 欧美极品少妇xxxxⅹ免费视频| 姬川优奈aav一区二区| 亚洲精品视频在线播放| 日韩激情在线视频| 国产精品欧美在线| 色综合久久久888| 久久亚洲春色中文字幕| 国产精品v日韩精品| 欧美视频裸体精品| 最近免费中文字幕视频2019| 欧美成人手机在线| 91精品国产网站| 国产精品第10页| 亚洲一区二区三区在线免费观看| 日韩精品极品视频| 亚洲自拍小视频| 1769国产精品| 日本精品va在线观看| 不卡av电影院| 国产精品午夜国产小视频| 国产精品色悠悠| 亚洲精品视频在线观看视频| 国产精品高精视频免费| 日韩免费观看高清| 亚洲视频精品在线| 一本大道亚洲视频| 日本精品久久久| 欧美午夜影院在线视频| 国内精品美女av在线播放| 欧美日韩免费网站| 欧美日韩一区免费| 91sa在线看| 欧美国产日韩中文字幕在线| 中文字幕精品av| 亚洲国产精品高清久久久| 欧美亚洲国产视频小说| 91精品91久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美大学生性色视频| 欧美日韩国产精品一区| 国产精品一区二区三区久久久| www国产亚洲精品久久网站| 久久久午夜视频| 久久精品国产2020观看福利| 国产日韩av高清| 国产色婷婷国产综合在线理论片a| 国产一区二区色| 久久久久一本一区二区青青蜜月| 亚洲福利精品在线| 精品国产欧美一区二区五十路| 亚洲国产精品一区二区久| 日韩av电影手机在线观看| 色偷偷av亚洲男人的天堂| 亚洲在线免费看| 韩国美女主播一区| 日韩中文字幕不卡视频| 成人欧美一区二区三区在线湿哒哒| 日韩成人黄色av| 91精品啪aⅴ在线观看国产| 欧美亚洲另类制服自拍| 久久精品色欧美aⅴ一区二区| 51色欧美片视频在线观看| 日韩亚洲在线观看| 日本精品免费观看| 国产欧美日韩精品丝袜高跟鞋| 奇门遁甲1982国语版免费观看高清| 日韩av电影在线免费播放| 久久天天躁夜夜躁狠狠躁2022| 91精品国产亚洲| 97**国产露脸精品国产| 亚洲国产精品久久91精品| 国产91精品网站| 国产午夜精品视频免费不卡69堂| 草民午夜欧美限制a级福利片| 亚洲国产精品国自产拍av秋霞| 欧美一级黑人aaaaaaa做受| 91av在线免费观看| 亚洲精品国产欧美| 成人午夜一级二级三级| 亚洲自拍偷拍区| 欧美高清视频免费观看| 国产91精品黑色丝袜高跟鞋| 亚洲а∨天堂久久精品9966| 成人性生交大片免费看小说| 中文字幕最新精品| 91性高湖久久久久久久久_久久99| 亚洲国产另类 国产精品国产免费| 日韩在线视频网站| 韩国v欧美v日本v亚洲| 久久精视频免费在线久久完整在线看| 国产欧美精品一区二区三区-老狼| 欧美成人在线免费视频| 欧美超级免费视 在线| 欧美理论电影在线播放| 欧美床上激情在线观看| 成人做爰www免费看视频网站| 亚洲白拍色综合图区| 亚洲人av在线影院| 国产在线视频一区| 国产日韩欧美中文| 国产精品一区二区电影| 国产精品久久久久高潮| 亚洲国产精品成人va在线观看| 日韩有码视频在线| 日韩av在线直播| 欧美激情精品久久久久久久变态| 欧美富婆性猛交| 亚洲国产精品女人久久久| 自拍偷拍亚洲一区| 日韩av快播网址| 亚洲国产91精品在线观看| 91欧美日韩一区| 在线色欧美三级视频| 亚洲图片欧洲图片av| 久久99精品久久久久久琪琪| 精品高清美女精品国产区| 亚洲在线免费看| 久久天天躁狠狠躁夜夜躁| 国产啪精品视频网站| 欧美高清在线播放| 亚洲色图欧美制服丝袜另类第一页| 精品久久久久久中文字幕一区奶水| 国产精品久久久久久久av大片| 国产精品永久免费视频| 亚洲剧情一区二区| 国a精品视频大全| 国产精品国产三级国产aⅴ浪潮| 久久久999精品免费| 欧美国产日韩精品| 欧美疯狂性受xxxxx另类| 国产伦精品一区二区三区精品视频| 这里只有视频精品| 国内精品小视频在线观看| 久久久视频在线| **欧美日韩vr在线| 国产伦精品免费视频| 亚洲成人精品视频在线观看| 最新国产精品拍自在线播放| 欧美激情视频三区| 欧美日韩亚洲成人| 国产日产亚洲精品| 日韩精品极品视频免费观看| 午夜免费在线观看精品视频| 中文国产成人精品| 国产精品成人一区二区三区吃奶| 日本一本a高清免费不卡| 国产有码在线一区二区视频| 亚洲毛片一区二区| 怡红院精品视频|