国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

MVC系列學(xué)習(xí)(十六)-區(qū)域的學(xué)習(xí)

2019-11-14 16:00:18
字體:
供稿:網(wǎng)友

1.查找控制器的過程

1.1調(diào)用其他項(xiàng)目中的控制器

a.先到網(wǎng)站根目錄下的bin文件夾下,遍歷所有的程序集

b.找到以Controller結(jié)尾的類

c.再找出其中繼承了Controller的類

d.接著創(chuàng)建同名的對(duì)象,并調(diào)用Action方法

image

1.2當(dāng)調(diào)用同名控制器時(shí)

知道了控制器是怎么找到了,那如果bin中有兩個(gè)同名的控制器怎么辦,先看看問題

image

解決方式

a.在路由配置信息中,在遍歷控制器時(shí),只到指定命名空間下查找
b.可以看到namespaces是一個(gè)數(shù)組,即可以指定多個(gè)命名空間,可以提高遍歷速度

image

2.找視圖的過程

2.1外部控制器,加載視圖

a.先到 請(qǐng)求網(wǎng)站根目錄下的 View文件夾 中找與控制器同名的視圖
b.再到 請(qǐng)求網(wǎng)站根目錄下的 View文件夾 中找共享文件夾中的的視圖

image

2.2知道了視圖加載,那么我們就在網(wǎng)站跟目錄下,添加一個(gè)視圖

image

2.3下面我們來改下,路由信息中的命名空間,其他都不變

結(jié)論:多個(gè)控制器共享同一個(gè)視圖,做到了控制器與視圖的分離,即業(yè)務(wù)與視圖分離

image

3.開始區(qū)域

3.1先來說說區(qū)域怎么用

在網(wǎng)站根目錄下,右擊添加區(qū)域,輸入?yún)^(qū)域名,如下我添加了兩個(gè)區(qū)域;同時(shí)也添加了兩個(gè)類庫,如下

image

3.2看看區(qū)域?yàn)槲覀冏隽耸裁?/p>

1.網(wǎng)站啟動(dòng)的時(shí)候,最先會(huì)調(diào)用application_Start(),則在網(wǎng)站啟動(dòng)的時(shí)候,就注冊(cè)了區(qū)域路由。
當(dāng)網(wǎng)站啟動(dòng)的時(shí)候,首先去網(wǎng)站根目錄下的bin文件夾中,找繼承了AreaRegistration類的區(qū)域注冊(cè)類,
然后創(chuàng)建這些類的對(duì)象,并調(diào)用它的RegisterArea()方法,來完成區(qū)域路由注冊(cè)
2.然后在事件管道中,根據(jù)請(qǐng)求的url到靜態(tài)路由表中,查找匹配的路由
3.在第11和12事件間,調(diào)用沒vcHandler的PR()方法,在其中根據(jù) 匹配 的結(jié)果去查找相應(yīng)的控制器類

 

image

3.3開始執(zhí)行

因?yàn)槁酚杀碇凶?cè)了區(qū)域路由,即User/{controller}/{action}/{id},那么在請(qǐng)求的時(shí)候,就要加上區(qū)域文件User。

因?yàn)榭刂破髟陬悗霼serController中,在找程序集的時(shí)候,會(huì)根據(jù) 命名空間來找控制器類。

同時(shí)會(huì)調(diào)用Views/UserHome/Index.cshtml視圖,為了看到效果,我們?cè)贏rea/User/View/UserHome下添加一個(gè)視圖。

由上面找控制器可知:

1.我們可以在區(qū)域注冊(cè)文件中,添加一個(gè)namespace,值為UserController的命名空間,或者

2.將區(qū)域注冊(cè) 文件的命名空間改成UserController的命名空間,

我選擇了第二種,為了方便,我直接把區(qū)域注冊(cè)文件拉到UserController類庫中,再直接把命名空間改掉

image

3.4為什么要用區(qū)域

我最開始,說建兩個(gè)區(qū)域,和兩個(gè)類庫,大家有沒有想到什么。沒錯(cuò),用區(qū)域的好處,就把控制器單獨(dú)的功能,獨(dú)立開來,而不是把所有的控制器擠在一塊,那會(huì)很擁擠,同時(shí)在P01MVCWeb項(xiàng)目中,只有視圖,我們最好把區(qū)域注冊(cè)文件,也放到與控制器同項(xiàng)目的地方

4.得出結(jié)論

0.瀏覽器發(fā)來請(qǐng)求:/User/UserHome/Index
1.網(wǎng)站啟動(dòng)的時(shí)候,最先會(huì)調(diào)用Application_Start(),則在網(wǎng)站啟動(dòng)的時(shí)候,就注冊(cè)了區(qū)域路由。
【當(dāng)網(wǎng)站啟動(dòng)的時(shí)候,首先去網(wǎng)站根目錄下的bin文件夾中,找繼承了AreaRegistration類的區(qū)域注冊(cè)類,
然后創(chuàng)建這些類的對(duì)象,并調(diào)用它的RegisterArea()方法,來完成區(qū)域路由注冊(cè)】
2.然后在事件管道中,根據(jù)請(qǐng)求的url到靜態(tài)路由表中,查找匹配的路由:User/{controller}/{action}/{id}
3.在第11和12事件間,調(diào)用沒vcHandler的PR()方法,在其中根據(jù) 匹配 的結(jié)果去查找相應(yīng)的控制器類,即類UserHome.cs
3.1因?yàn)槲覀冊(cè)谧?cè)區(qū)域路由的時(shí)候,指定了查找的命名空間,然后找到
【不寫的話,默認(rèn)是使用區(qū)域注冊(cè)類的命名空間】
4.找到控制器類后,就創(chuàng)建該類的對(duì)象,并調(diào)用它的Index方法
5.控制器指定調(diào)用的視圖,執(zhí)行View()方法返回的是 ViewResult對(duì)象
【Action方法,只是創(chuàng)建視圖對(duì)象,并沒有加載視圖】
5.1然后調(diào)用ViewResult對(duì)象的ExcuteResult()方法
5.2然后查找相應(yīng)的視圖引擎【本次使用的是Razor引擎】,并通過視圖引擎找到相應(yīng)的視圖

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广昌县| 绥棱县| 浦县| 合阳县| 衡水市| 巨鹿县| 綦江县| 舞阳县| 乳山市| 金昌市| 保山市| 旌德县| 庐江县| 恩平市| 张家界市| 北流市| 类乌齐县| 楚雄市| 南皮县| 云梦县| 五莲县| 田林县| 神农架林区| 九江县| 定南县| 安新县| 财经| 广丰县| 永州市| 翁牛特旗| 大宁县| 平顶山市| 高雄县| 龙胜| 神农架林区| 调兵山市| 彰化市| 上虞市| 灵寿县| 华阴市| 嵩明县|