婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 解讀ASP.NET 5 & MVC6系列教程(16):自定義View視圖文件查找邏輯

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

熱門標(biāo)簽:臨沂智能電話機(jī)器人加盟 百應(yīng)電話機(jī)器人外呼系統(tǒng) 外呼電話機(jī)器人成本 蘇州如何辦理400電話 西寧呼叫中心外呼系統(tǒng)線路商 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 400電話辦理怎么樣 聯(lián)通官網(wǎng)400電話辦理 地圖標(biāo)注軟件免費(fèi)下載

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

通過(guò)RazorViewEngine來(lái)控制View路徑

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

public class ThemeViewEngine : RazorViewEngine
{
  public ThemeViewEngine(IRazorPageFactory pageFactory,
    IRazorViewFactory viewFactory,
    IViewLocationExpanderProvider viewLocationExpanderProvider,
    IViewLocationCache viewLocationCache)
    : base(pageFactory,
        viewFactory,
        viewLocationExpanderProvider,
        viewLocationCache)
  {
  }

  public override IEnumerablestring> AreaViewLocationFormats
  {
    get
    {
      var value = new Random().Next(0, 1);
      var theme = value == 0 ? "Theme1" : "Theme2"; // 可通過(guò)其它條件,設(shè)置皮膚的種類
      return base.AreaViewLocationFormats.Select(f => f.Replace("/Views/", "/Views/" + theme + "/"));
    }
  }

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

然后,通過(guò)修改MVcOptions的實(shí)例屬性ViewEngines即可完成對(duì)視圖引擎的替換,代碼如下:

services.AddMvc().ConfigureMvcOptions>(options =>
{
  options.ViewEngines.Clear();
  options.ViewEngines.Add(typeof(ThemeViewEngine));
});

這樣,系統(tǒng)在查找視圖文件的時(shí)候,就會(huì)按照新注冊(cè)的ThemeViewEngine的邏輯來(lái)執(zhí)行。

通過(guò)IViewLocationExpander來(lái)控制View路徑

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

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 IEnumerablestring> ExpandViewLocations(ViewLocationExpanderContext context,
                              IEnumerablestring> viewLocations)
  {
    return viewLocations.Select(f => f.Replace("/Views/", "/Views/" + context.Values["theme"] + "/"));
  }
}

在上述自定義的IViewLocationExpander中,實(shí)現(xiàn)了2個(gè)方法分別是PopulateValuesExpandViewLocationsPopulateValues方法可以讓我們想ViewLocationExpanderContext上下文中添加響應(yīng)的鍵值對(duì)以便后續(xù)使用,通過(guò),我們可以利用通過(guò)該上下文對(duì)象,來(lái)查找ActionContextHttpContext對(duì)象,以便利用這些對(duì)象做響應(yīng)的判斷操作;而ExpandViewLocations方法,只會(huì)在沒(méi)有View緩存或在View緩存里找不到對(duì)應(yīng)key的View文件時(shí)才會(huì)調(diào)用該方法,在該方法內(nèi),我們可以動(dòng)態(tài)返回視圖的位置。

最后,我們?cè)?code>Startup.cs里通過(guò)修改RazorViewEngineOptions實(shí)例對(duì)象的ViewLocationExpanders屬性,來(lái)實(shí)現(xiàn)注冊(cè)目的,代碼如下:

services.ConfigureRazorViewEngineOptions>(options =>
{
  options.ViewLocationExpanders.Add(typeof(ThemViewLocationExpander));
});
您可能感興趣的文章:
  • .NET6中哈希算法的簡(jiǎn)化用法的實(shí)現(xiàn)
  • ASP.NET Core項(xiàng)目配置教程(6)
  • ASP.NET MVC5+EF6+EasyUI 后臺(tái)管理系統(tǒng)(81)-數(shù)據(jù)篩選(萬(wàn)能查詢)實(shí)例
  • ASP.NET MVC異步獲取和刷新ExtJS6 TreeStore
  • 解讀ASP.NET 5 & MVC6系列教程(17):MVC中的其他新特性
  • .NET 6 中的隱式命名空間引用

標(biāo)簽:甘肅 海西 臨夏 聊城 慶陽(yáng) 中衛(wèi) 清遠(yuǎn) 巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解讀ASP.NET 5 & MVC6系列教程(16):自定義View視圖文件查找邏輯》,本文關(guān)鍵詞  解讀,ASP.NET,amp,MVC6,系列,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。

  • 相關(guān)文章
  • 下面列出與本文章《解讀ASP.NET 5 & MVC6系列教程(16):自定義View視圖文件查找邏輯》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于解讀ASP.NET 5 & MVC6系列教程(16):自定義View視圖文件查找邏輯的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 巫山县| 巢湖市| 房山区| 张家口市| 达州市| 成安县| 板桥市| 黑河市| 涡阳县| 昌都县| 武义县| 洛阳市| 北辰区| 固安县| 石泉县| 鹿邑县| 屏南县| 阿城市| 桂阳县| 巴林右旗| 上饶县| 呼图壁县| 连南| 内丘县| 托克托县| 仲巴县| 万州区| 汉阴县| 绥阳县| 凌源市| 阜城县| 宜城市| 奈曼旗| 漯河市| 义乌市| 光泽县| 鹤山市| 台北县| 辽宁省| 安泽县| 松原市|