<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

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

      2015-06-02 09:07  湯姆大叔  閱讀(12456)  評論(6)    收藏  舉報

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

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

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

      同步與推薦

      本文已同步至目錄索引:解讀ASP.NET 5 & MVC6系列

      主站蜘蛛池模板: 久久久久国产精品熟女影院| 免费无码中文字幕A级毛片| 国产亚洲精品精品精品| 国产午夜福利一区二区三区| 久草热久草热线频97精品| 国产成人精品av| 国产老熟女无套内射不卡| 日本欧美大码a在线观看| 国产AV无码专区亚洲AV漫画| 国产福利酱国产一区二区| 婷婷四虎东京热无码群交双飞视频| 日韩精品人妻av一区二区三区| 大尺度国产一区二区视频| 虎白女粉嫩尤物福利视频| 欧美黑吊大战白妞| 国产精品午夜av福利| 色综合色天天久久婷婷基地| 精品无码一区二区三区电影| 极品无码国模国产在线观看| 无码国内精品久久人妻蜜桃| 国产在线观看91精品亚瑟| 免费人成网站免费看视频| 蜜臀久久99精品久久久久久| 亚洲欧洲精品一区二区| 日韩精品久久久肉伦网站| 久久精品无码免费不卡| 综合在线 亚洲 成人 欧美| 色欧美片视频在线观看| 男女真人国产牲交a做片野外| 欧美成年黄网站色视频| 少妇又爽又刺激视频| 国产福利在线观看免费第一福利| 国产一区二区午夜福利久久| 五月婷婷深开心五月天| 精品国产中文字幕在线| 亚洲精品国产综合麻豆久久99 | 国内少妇偷人精品免费| 最新亚洲人成网站在线观看| 亚洲av一本二本三本| 亚洲综合精品第一页| 亚洲综合网国产精品一区|