MVC学习系列-基础了解
ASP.NET 是一个开发框架,用于通过 HTML、CSS、JavaScript 以及服务器脚本来构建网页和网站。ASP.NET 支持三种开发模式:Web Pages、MVC (Model View Controller) 以及 Web Form。下面首先区别比较一下Web Form 和MVC这两种设计模式,接着进行基础知识的讲解。
一、两种设计模式的区别
1.WebFrom 这种设计模式的实现方式有两种
(1)aspx前端页面+服务器控件(为控件设置事件响应方法)
(2)aspx前端页面+异步+ashx一般处理程序()
两种实现方式各有利弊,在此不累述
总的来说WebFrom 这种设计模式将程序的处理分为前台与后台,前台页面为通过 HTML、CSS、JavaScript 以及服务器脚本构建的网页,为aspx文件。后台代码为aspx.cs文件或一般处理程序,是对应于我们前台页面的代码(由此可知两者之间的耦合性比较强,不利于后期软件变更、维护)。对于初学WebForm的人员,我们常做的就是拖拉服务器控件,之后在为他们添加后台处理代码。
2.MVC设计模式的实现方式是将前台的呈现与后台的控制分离开来(较WebForm有了改进,极大降低了前台和后台的耦合性,有利于后期软件变更、维护),划分为了三个部分:Controller、View、Model 下面为大家详细讲解一下
Controller:控制器。在Contrller文件夹添加的以Controller结尾的类就是控制器,它的每个方法就是一个Action。它的职责是从Model中获取数据,并将数据交给View,它是个指挥家的角色,它并不控制View的显示逻辑,只是将Model的数据交给View,而具体的怎样展示数据那是View的职责,所以Controller跟View是一个弱耦合的状态,而Controller可以任意指定具体的View进行渲染,达到了UI层的代码和实体良好的分离。
View:视图.负责数据的展示,当然这个视图代码的编写应该是更接近纯净的Html的,而View层代码的书写又直接跟视图引擎解析的规则有关(在为Action添加视图时会有一个选项,是选择Razor还是aspx),Razor的语法跟webFrom视图引擎的语法截然不同
Model:很多人把Model理解成领域模型,而MVC本身是一个表现模式,它是更倾向于UI层的一个框架,所以一般我们指定的Model在使用时一般作为ViewModel来用。Model层进行数据库数据的存取,可以使用EF等实体框架进行操作。
3.程序的调试
WebFrom:当我们调试程序时请求的Url是具体的页面,我们可以进行某个页面是首页之类的设置
MVC:当我们调试程序时请求的Url是某个控制器下面的具体的Action,可以通过修改默认路由进行设置
WebForm、MVC这两种设计模式的比较到此结束,也许两者之间还有其他的区别,由于本人也是初学,对此不是很清楚,以后再补充二、MVC设计模式基础知识
MVC 设计模式总的业务流程如下图所示:
从上面的处理模型可以看出 用户请求的是一个控制器下面的具体的Action。客户端发送一个Http请求,首先被我们的IIS捕获到,然后根据Url请求的格式,最终交给我们的Route组件,然后它负责解析出我们的Url具体请求的是哪个Controller下的哪个Action。然后MVC经过处理调用我们的Action执行。在Action中我们一般会从业务的Model层取出数据然后将传输层的数据转换成ViewModel再交给View的视图引擎渲染,最终生成Html的字节流写回客户端。
Routing的作用:获取到View传过来的Url请求,并解析Url请求中Controller和Action以及数据,然后将识别出来的数据传递给Controller的Action(Controller的方法)。
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters// 设置Url的格式,我们也可以自定义 new { controller = "Ajax", action = "Index", id = UrlParameter.Optional } // Parameter defaults //默认请求的是Ajax控制器下面的Index方法 ); //也可以根据需要修改 }
上面讲解了一些MVC的基础知识,下面会基于MVC进行一些具体项目的练习。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。