图解ASP.NET MVC项目运行
原文链接:https://jingyan.baidu.com/article/90bc8fc8ac2e52f653640c33.html
吾终日所思也,不如须臾之所学也,刚开始看mvc架构,与以前的winform完全不一样,一头雾水,看完此内容豁然开朗。
1、Global.asax—应用程序启动注册路由
当对网站发出请求时,应用程序是如何把请求引到对应的控制器及里面的Action方法?
首先网站一启动,会提前加载根据控制器和Action方法设置的路由规则,这样一请求,路由就会分析之后把请求引到对应的控制器和Action方法,如下图所示:
注:RouteConfig类位于App_Start文件夹下面。
2、控制器
1)根据前面的解析,每次请求都是先定位控制器,然后再根据路由规则找到对应的Action方法!
2)但是在路由表里,我们只写了Home,但是MVC框架约定,控制器都是以Controller结尾,并继承了基类Controller!
3)在这里Index方法返回值类型是ActionResult,方法名和路由注册的方法名一致,在Index方法内,调用了View方法并且返回,这是一个重载的方法,可以给个参数,作为返回视图的名称,如果没有参数,默认就是以当前Action命名的视图。
4)也就是Asp.netMVC架构,不像Java的MVC通过配置来建立关系,他是约定大于配置,如下图所示:
3、视图
视图里的代码类似于之前的ASPX里面的代码,主要是HTML、JS和CSS等前端技术构成,从MVC1.0到MVC5.0变化很大,Razor语法越来越完善,强大,如下图所示:
4、向视图传递数据
1)传统的WebForm方式,前置页面类和后置代码类是继承的关系,可以直接进行数据传递。
2)MVC模式下,视图和控制器是完全分离的,通过专用渠道传递数据,ViewData是在控制器和视图之间传递数据的容器之一,如下图所示:
5、ASP.NET MVC执行顺序,如下图所示:
6、Model和三层架构
MVC与三层架构之间有没有区别?
1)、MVC和三层架构没有必然的关系,架构的思想是不一样的。
2)、三层架构强调的是物理分离(多个项目构成),MVC强调的是逻辑分离(一个项目构成)。
3)、MVC中也可以体现三层架构,如下图所示:
7、有些MVC企业框架为了方便管理,会故意把Models做分层设计。
注意:在MVC中如果它不属于View也不属于Controller,那么就把它归到Model中。