中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

愛上(shang)MVC3系(xi)列(lie)~改變(bian)Areas的(de)FindView順序

回到目錄

我(wo)們在開(kai)發MVC項(xiang)目時,由于項(xiang)目比較大,往(wang)往(wang)會根據模塊去建立Areas,這樣不(bu)僅(jin)可以(yi)使程序(xu)的結構(gou)清晰,而(er)且也(ye)有利于進行路由的部(bu)屬(shu)。而(er)在進行Areas的開(kai)發時,我(wo)們往(wang)往(wang)會有這樣的情況(kuang):

1 Areas下(xia)有自己的_Layout模板(ban),而我(wo)們(men)希(xi)望(wang)所(suo)有Areas都(dou)用公(gong)用的(~/views/shared)下(xia)的模板(ban),這(zhe)樣我(wo)們(men)應該怎(zen)么做呢?

兩個模版的(de)名稱是(shi)一(yi)樣的(de),在MVC中它會優先使用那(nei)個呢(ni)?

這是我們所(suo)關(guan)注的(de)問題,經過測試表(biao)明,在默認情(qing)況(kuang)下(xia),MVC會(hui)使用(yong)自己Areas里定義的(de)模(mo)板,而不(bu)會(hui)使用(yong)View/Shares目錄的(de),這很正常(chang),因(yin)為它的(de)優先(xian)級肯(ken)定是以(yi)離它最近的(de)那個模(mo)板為主。

總結 views的(de)查詢順(shun)應是:

而如果我(wo)們(men)要改(gai)變這(zhe)樣順序,我(wo)們(men)可(ke)以通(tong)過ViewEngines類(lei)型下的(de)Engines屬性,它是一個ViewEngineCollection類(lei)型的(de)集合,我(wo)們(men)可(ke)以向里(li)面往很多模板(ban)規則,它會以第一個規則為準。而這(zhe)些規則我(wo)們(men)可(ke)以向路由規則一樣在global里(li)進(jin)行注冊。

   protected void Application_Start()
        {
            #region 注冊頁面引擎
            ViewEngines.Engines.Clear();//清(qing)空所有FindView規則(ze)
            ViewEngines.Engines.Insert(0, new CustomRazorViewEngine());
            #endregion
...
}
 1  /// <summary>
 2         /// 建(jian)立一個頁面搜(sou)索(suo)引擎,針對Razor
 3         /// 按著自己(ji)希望的VIEW定位順序去(qu)訂定,默認情況下areas區(qu)域(yu)的view查(cha)詢時,先找自己(ji)的areas,然后找view/shared,
 4         /// 我們可(ke)以(yi)改變它的(de)順序
 5         /// </summary>
 6         private class CustomRazorViewEngine : RazorViewEngine
 7         {
 8             public CustomRazorViewEngine()
 9                 : base()
10             {
11                 base.AreaMasterLocationFormats = new string[]
12                 {
13                       "~/Views/Shared/{0}.cshtml",
14                     "~/Areas/{2}/Views/{1}/{0}.cshtml", 
15                      "~/Areas/{2}/Views/Shared/{0}.cshtml", 
16                    
17                  };
18 
19                 base.AreaViewLocationFormats = new string[] 
20                 { 
21                     "~/Areas/{2}/Views/{1}/{0}.cshtml", 
22                      "~/Areas/{2}/Views/Shared/{0}.cshtml",
23                     "~/Views/Shared/{0}.cshtml"
24                 };
25 
26                 base.AreaPartialViewLocationFormats = base.AreaViewLocationFormats;
27             }
28         }

OK,我們可以看到,我們把"~/Views/Shared/{0}.cshtml"這(zhe)個規則放到(dao)上第1個位置,這(zhe)時,它會被優先使用。

看來,回頭應該把global里的用法寫個文章了,呵呵。

 

回到目錄

 

 

posted @ 2012-09-20 11:32  張占嶺  閱讀(2166)  評論(4)    收藏  舉報