日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC 利用AreaRegistration进行Area区域模块化开发

發(fā)布時(shí)間:2025/3/11 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC 利用AreaRegistration进行Area区域模块化开发 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景資料:

隨著業(yè)務(wù)的需要,結(jié)構(gòu)需求越來(lái)越多,View文件夾下的文件夾也越來(lái)越多,又或者需要更改結(jié)構(gòu)的頁(yè)面路徑,另外可能是多個(gè)人合作開(kāi)發(fā),有多個(gè)WEB項(xiàng)目需要合并在一個(gè)網(wǎng)站中訪問(wèn)。

用Areas可以解決上述問(wèn)題,在項(xiàng)目中新建一個(gè)區(qū)域,就好像應(yīng)用了另外一個(gè)項(xiàng)目一樣,可以理解為當(dāng)前項(xiàng)目的子項(xiàng)目,其本質(zhì)就是一個(gè)子文件夾。就好比使用Area之前是把所有的文件夾放到一個(gè)文件夾中,使用了Area就相當(dāng)于使用了子文件夾來(lái)進(jìn)行管理,這樣,Areas就可以將復(fù)雜的網(wǎng)站模板化,有利于頁(yè)面的規(guī)范。

但是Areas又帶來(lái)了另外一個(gè)問(wèn)題:在同一個(gè)解決方案中使用多個(gè)Area,會(huì)造成程序的耦合性大大增加,當(dāng)多個(gè)開(kāi)發(fā)人員合作的時(shí)候,由于開(kāi)發(fā)人員的能力參差不齊,經(jīng)常會(huì)產(chǎn)生一個(gè)Area中的某個(gè)功能修改后,影響到了另一個(gè)Area,而且項(xiàng)目編譯后,bin目錄下只會(huì)產(chǎn)生一個(gè)此項(xiàng)目本身的DLL,這樣是非常不好的。如果能將某些Area分離出來(lái)自成一個(gè)項(xiàng)目,單獨(dú)進(jìn)行修改,單獨(dú)對(duì)其更新DLL,那就太棒了!本文就是要用簡(jiǎn)單的案例演示這個(gè)功能。

新建一個(gè)MVC項(xiàng)目,并且增加一個(gè)區(qū)域,命名為Report,如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ??

在Report區(qū)域中隨便加個(gè)Control , View ,Model,反正是用來(lái)測(cè)試的,我添加的功能十分簡(jiǎn)單,就是在頁(yè)面上顯示一串字符串而已,如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Model中的代碼如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ?Control中的代碼如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ?View中的代碼如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??

? ?因?yàn)楣δ鼙容^簡(jiǎn)單,在瀏覽器中輸入路由路徑,功能顯示沒(méi)有問(wèn)題,如下圖所示:

? ? ? ? ? ? ? ? ??


接下去我要將Report區(qū)域分離出來(lái),首先,再新建一個(gè)MVC項(xiàng)目,命名為Report,如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?刪除Report區(qū)域中其他文件,并且將WebApplication中Report區(qū)域下的ReportAreaRegistration文件復(fù)制到Report項(xiàng)目中,并去掉路由注冊(cè)的代碼,重復(fù)的路由注冊(cè)會(huì)報(bào)錯(cuò)?,Report項(xiàng)目的目錄如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?ReportAreaRegistration.cs文件中的代碼如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

將?WebApplication中Report區(qū)域下的Control文件和Model文件剪切到 Report中,View文件不需要剪切,如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

修改OneViewModel中的命名空間,如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

修改ReportOneControl中對(duì)OneViewMode引用的命名空間,如下圖所示:

? ? ? ? ? ? ? ? ? ?

?修改OneView中對(duì)OneViewModel引用的命名空間,如下圖所示:

? ? ? ? ? ? ? ? ? ?

重新編譯Report項(xiàng)目生成Report.dll后,?WebApplication1項(xiàng)目引用Report.dll,如下圖所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

到這里已經(jīng)完成了,Report相關(guān)的model 和 control代碼已經(jīng)剝離了,運(yùn)行后結(jié)果和原來(lái)一樣:

? ? ? ? ? ? ? ? ?

至于?AreaRegistration 的原理,目前還在研究中,感覺(jué)路由是跟命名空間有關(guān)系的,只要在同一命名空間下Control,即便被剝離出源項(xiàng)目,還是能引用到的。以下是摘抄來(lái)的一段話:AreaRegistration類型會(huì)將其所在的命名空間保存在DataTokens["Namespaces"]中,在接收請(qǐng)求的時(shí)候就只會(huì)在這些命名空間或子空間中尋找controller,如果命名空間寫(xiě)錯(cuò)了,當(dāng)然就無(wú)法識(shí)別了。因此實(shí)際上area注冊(cè)僅僅起到的作用是,將area的名字和命名空間關(guān)聯(lián)起來(lái)。因此如果要導(dǎo)航area中的controller必須首先提供area名字,這樣就不會(huì)找到其他命名空間下的controller了,它必須先去找你的area名字,它的機(jī)制是這樣的。

總結(jié)

以上是生活随笔為你收集整理的ASP.NET MVC 利用AreaRegistration进行Area区域模块化开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。