星空网 > 软件开发 > ASP.net

MVC系列学习(十六)

1.查找控制器的过程

1.1调用其他项目中的控制器

a.先到网站根目录下的bin文件夹下,遍历所有的程序集

b.找到以Controller结尾的类

c.再找出其中继承了Controller的类

d.接着创建同名的对象,并调用Action方法

MVC系列学习(十六)

1.2当调用同名控制器时

知道了控制器是怎么找到了,那如果bin中有两个同名的控制器怎么办,先看看问题

MVC系列学习(十六)

解决方式

a.在路由配置信息中,在遍历控制器时,只到指定命名空间下查找
b.可以看到namespaces是一个数组,即可以指定多个命名空间,可以提高遍历速度

MVC系列学习(十六)

2.找视图的过程

2.1外部控制器,加载视图

a.先到 请求网站根目录下的 View文件夹 中找与控制器同名的视图
b.再到 请求网站根目录下的 View文件夹 中找共享文件夹中的的视图

MVC系列学习(十六)

2.2知道了视图加载,那么我们就在网站跟目录下,添加一个视图

MVC系列学习(十六)

2.3下面我们来改下,路由信息中的命名空间,其他都不变

结论:多个控制器共享同一个视图,做到了控制器与视图的分离,即业务与视图分离

MVC系列学习(十六)

3.开始区域

3.1先来说说区域怎么用

在网站根目录下,右击添加区域,输入区域名,如下我添加了两个区域;同时也添加了两个类库,如下

MVC系列学习(十六)

3.2看看区域为我们做了什么

1.网站启动的时候,最先会调用Application_Start(),则在网站启动的时候,就注册了区域路由。
当网站启动的时候,首先去网站根目录下的bin文件夹中,找继承了AreaRegistration类的区域注册类,
然后创建这些类的对象,并调用它的RegisterArea()方法,来完成区域路由注册
2.然后在事件管道中,根据请求的url到静态路由表中,查找匹配的路由
3.在第11和12事件间,调用没vcHandler的PR()方法,在其中根据 匹配 的结果去查找相应的控制器类

 

MVC系列学习(十六)

3.3开始执行

因为路由表中注册了区域路由,即User/{controller}/{action}/{id},那么在请求的时候,就要加上区域文件User。

因为控制器在类库UserController中,在找程序集的时候,会根据 命名空间来找控制器类。

同时会调用Views/UserHome/Index.cshtml视图,为了看到效果,我们在Area/User/View/UserHome下添加一个视图。

由上面找控制器可知:

1.我们可以在区域注册文件中,添加一个namespace,值为UserController的命名空间,或者

2.将区域注册 文件的命名空间改成UserController的命名空间,

我选择了第二种,为了方便,我直接把区域注册文件拉到UserController类库中,再直接把命名空间改掉

MVC系列学习(十六)

3.4为什么要用区域

我最开始,说建两个区域,和两个类库,大家有没有想到什么。没错,用区域的好处,就把控制器单独的功能,独立开来,而不是把所有的控制器挤在一块,那会很拥挤,同时在P01MVCWeb项目中,只有视图,我们最好把区域注册文件,也放到与控制器同项目的地方

4.得出结论

0.浏览器发来请求:/User/UserHome/Index
1.网站启动的时候,最先会调用Application_Start(),则在网站启动的时候,就注册了区域路由。
【当网站启动的时候,首先去网站根目录下的bin文件夹中,找继承了AreaRegistration类的区域注册类,
然后创建这些类的对象,并调用它的RegisterArea()方法,来完成区域路由注册】
2.然后在事件管道中,根据请求的url到静态路由表中,查找匹配的路由:User/{controller}/{action}/{id}
3.在第11和12事件间,调用没vcHandler的PR()方法,在其中根据 匹配 的结果去查找相应的控制器类,即类UserHome.cs
3.1因为我们在注册区域路由的时候,指定了查找的命名空间,然后找到
【不写的话,默认是使用区域注册类的命名空间】
4.找到控制器类后,就创建该类的对象,并调用它的Index方法
5.控制器指定调用的视图,执行View()方法返回的是 ViewResult对象
5.1然后调用ViewResult对象的ExcuteResult()方法
5.2然后查找相应的视图引擎【本次使用的是Razor引擎】,并通过视图引擎找到相应的视图



原标题:MVC系列学习(十六)

关键词:mvc

mvc
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

跨境电商正成为中俄贸易的一大亮点!:https://www.ikjzd.com/articles/97796
亚马逊站内秒杀报名及注意事项:https://www.ikjzd.com/articles/97797
亚马逊卖家请注意,这样做会被限制与买家联系:https://www.ikjzd.com/articles/97798
速卖通站外引流怎么做?如何开展YouTube推广?:https://www.ikjzd.com/articles/97799
亚马逊欧洲站再度下调销售佣金 / Flipkart平台采用AI机器人分拣包裹:https://www.ikjzd.com/articles/97800
亚马逊中东站选品与费用详情一览:https://www.ikjzd.com/articles/97801
重庆风景名胜?:https://www.vstour.cn/a/404236.html
卓欧毕雪酒店推荐:https://www.vstour.cn/a/404237.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流