成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

移動開發 Android
之前MVC5和之前的版本中,我們要想對View文件的路徑進行控制的話,則必須要對IViewEngine接口的FindPartialView或FindView方法進行重寫,所有的視圖引擎都繼承于該IViewEngine接口,比如默認的RazorViewEngine。

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

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

 

  1. public class ThemeViewEngine : RazorViewEngine 
  2. public ThemeViewEngine(IRazorPageFactory pageFactory, 
  3. IRazorViewFactory viewFactory, 
  4. IViewLocationExpanderProvider viewLocationExpanderProvider, 
  5. IViewLocationCache viewLocationCache) 
  6. : base(pageFactory, 
  7. viewFactory, 
  8. viewLocationExpanderProvider, 
  9. viewLocationCache) 
  10.  
  11. public override IEnumerable<string> AreaViewLocationFormats 
  12. get 
  13. var value = new Random().Next(01); 
  14. var theme = value == 0 ? "Theme1" : "Theme2"// 可通過其它條件,設置皮膚的種類 
  15. return base.AreaViewLocationFormats.Select(f => f.Replace("/Views/""/Views/" + theme + "/")); 
  16.  
  17. public override IEnumerable<string> ViewLocationFormats 
  18. get 


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

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

 

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

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

 

  1. public class ThemeViewLocationExpander : IViewLocationExpander 
  2. public void PopulateValues(ViewLocationExpanderContext context) 
  3. var value = new Random().Next(01); 
  4. var theme = value == 0 ? "Theme1" : "Theme2"
  5. context.Values["theme"] = theme; 
  6.  
  7. public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, 
  8. IEnumerable<string> viewLocations) 
  9. 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屬性,來實現注冊目的,代碼如下:

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

 

責任編輯:chenqingxiang 來源: 湯姆大叔的博客
相關推薦

2015-06-18 16:39:17

ASP.NET

2015-06-18 16:29:14

ASP.NET

2015-06-17 14:42:04

ASP.NET

2015-06-29 10:00:02

ASP.NETMVC6

2015-06-16 15:01:59

ASP.NET 5

2015-06-17 16:01:30

ASP.NET

2015-06-17 16:45:28

ASP.NET

2015-06-18 14:13:36

ASP.NET

2015-06-18 17:04:22

ASP.NET

2015-06-17 16:04:36

ASP.NET

2015-06-17 17:01:48

ASP.NET

2015-06-17 10:16:30

ASP.NET

2015-06-18 17:37:19

ASP.NET

2015-06-17 14:16:50

ASP.NET

2015-06-17 14:09:36

ASP.NET

2015-06-17 14:18:50

ASP.NET

2015-06-18 14:25:56

ASP.NET

2009-11-24 15:11:21

ASP.NET MVC

2009-07-22 15:27:39

ASP.NET MVC自定義路由

2010-04-30 09:32:49

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产一区二区三区久久久久久 | 成人在线精品视频 | 天堂一区二区三区 | av中文字幕网站 | 亚洲综合二区 | 视频一区在线观看 | 国产成人免费视频网站高清观看视频 | 日韩成人免费视频 | 天堂综合网久久 | 久久国产视频播放 | 亚洲va欧美va天堂v国产综合 | 午夜视频免费在线观看 | 欧美精品一区在线 | 剑来高清在线观看 | 久久精品一区 | 色综合久久久 | 久久这里只有 | 国产成人精品一区二区三区在线 | 影音先锋成人资源 | 亚洲一区二区三区在线视频 | 99精品视频在线观看免费播放 | 日本亚洲一区 | 美女久久久久久久 | 国产人成精品一区二区三 | 一级黄色片网址 | 999国产视频| 日韩欧美一区在线 | 国产成人精品免高潮在线观看 | 81精品国产乱码久久久久久 | 天天操夜夜操 | 日韩精品中文字幕一区二区三区 | 欧美日韩最新 | 久久久久久久夜 | 综合二区 | 国内av在线 | 精品久久久久久久久久久久久久久久久 | 国产剧情久久 | 成人一区二区视频 | 国产精品久久二区 | 久久亚洲一区二区 | 亚洲一区二区三区视频在线 |