【ASP.NET专题】(1)——ASP.NET MVC初探

本文介绍了ASP.NET MVC框架的基本概念和优势,包括MVC模式的组成部分、使用MVC的原因,以及与传统ASP.NET三层结构的对比。文章还强调了MVC在复杂项目管理、测试驱动开发和代码可读性上的优势。此外,提供了学习资源和使用ASP.NET MVC前的准备工作,引导读者逐步入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ASP.NET MVC Framework是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架.已于2009年3月19日正式发布. MVC(Model-View-Controller)用于表示一种软件架构模式.它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller). 既然是一个优秀的框架,那么就值得去学习一把,网上搜索了许多资料,希望对于MVC的学习有帮助。

目前官方已经公布了ASP.NET MVC 2 RC,但是推荐大家还是先把1.0学好,因为一切都是相通的。

一、学习资料

1、http://www.asp.net/mvc/:这肯定是最权威的指导,它提供了MVC的下载、解释了什么是MVC、也教会了我们如何去使用MVC。如果英文还好的话建议通过官方文档学习。

2、http://kb.cnblogs.com/zt/mvc/:博客园提供的ASP.NET MVC技术专题。这里有许多国内的大牛写一些学习笔记,相信有很多是可以把大家引入门的。同时也衷心希望优快云也把相关专题做出来。

3、http://www.baidu.com/s?wd=asp.net+mvc&oq=asp.&f=3&rsp=1:"百度:asp.net mvc"最直接的学习方式。

4、http://www.cnblogs.com/WizardWu/archive/2009/04/18/1438809.html:一个网友写的《快速弄懂ASP.NET MVC》

5、http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/ASPNET-MVC-1.html:一个网友写的《从0开始学习ASP.NET MVC》

二、ASP.NET MVC 1.0浅析

2.1 MVC的组成

Models:访问数据库,装载数据、处理业务逻辑。在项目中体现为数据实体类加业务代理类。
Views:显示数据,用户界面。在项目中体现为aspx页面,偶尔可以加上code-behind。
Controller:按路由规则将请求的数据传送给指定页面,用于显示;也可以把用户输入的数据传递给逻辑处理类。它可以包含简单的验证逻辑。不应包含数据访问逻辑。

MVC架构的运作方式如图0所示。

图0 MVC架构运作方式

2.2 为何使用MVC

提出MVC的目的无非是提高开发效率、提高可测试性。官方的ASP.NET MVC 1.0指南中指出(以下简称指南),基于MVC的Web应用程序有如下优点:
1、对复杂的程序管理更方便
It makes it easier to manage complexity by dividing an application into the model, the view, and the ontroller.

2、在开发上有更高的可控性
It does not use view state or server-based forms. This makes the MVC framework ideal for developers who want full control over the behavior of an application.
3、Routing使软件设计有更多灵活性
It uses a Front Controller pattern that processes Web application requests through a single controller. This enables you to design an application that supports a rich routing infrastructure.
4、更加适合测试驱动开发
It provides better support for test-driven development (TDD).
5、团队开发项目中有更高的可控性
It works well for Web applications that are supported by large teams of developers and Web designers who need a high degree of control over the application behavior.
同时MVC框架还有以下特点:
1、将应用程序分成各个组成部份,更有利于测试。MVC框架是基于接口的,这样可以利用MOCK方式来替换你的实际类;做单元测试的时候,也可以不运行Contrllers,这样的测试就更快更灵活。
2、MVC框架是可扩展的,你可以自己设计并替换视图引擎、URL导向规则、Action的参数序列等等。同时MVC框架也支持依赖注入和控制反转,你可以从外部注入实例,而不用让类自己创建实例,你还可以通过配置文件的方式创建实例,这样使得测试更方便。
3、强大的URL映射组件使得你的应用程序的URL更易理解,同时具备搜索能力。你的URL不必包括文件路径,这样的设计很适合自定义查询引擎和REST架构。
4、MVC框架仍然支持ASP.NET中的页面、用户控件、母版页作为视图的模板;同时你也还可以使用嵌套母版页、行内表达式(in-line expressions<%= %>)、服务器端控件、模板、数据绑定、本地化等等属于ASP.NET已有的东西。
5、同时ASP.NET中的FORM验证、Windows验证、URL授权、Membership、角色、输出、数据缓存、Session、Profile 状态管理、配置、Provider框架等特性在MVC框架中仍然是可用的。

小结:ASP.NET MVC 1.0框架是基于ASP.NET的,所以他包括了ASP.NET中的几乎所有特性。同时他为设计人员提供了一套测试的方案(当然这是所有语言平台MVC模式的共性)。在安装了框架的VS2008中还增加了不少功能,可以方便地添加Views、Models、Controllers。

2.3 与三层结构的ASP.NET应用程序比较

与普通ASP.NET比较而言,最大的区别还是在于前台开发,后台包括的数据库访问、逻辑处理与以往的方式没有明显区别,在MVC框架中,这些统称为Model。而三层结构中,这些可以称为数据访问层与逻辑处理层。
1、页面开发
用这种模式开发的站点,光看页面的代码的确比以往少一些,但它更多地使用了页面脚本(<% ... %>)用于显示数据。在指南中并未提到不推荐使用服务器端控件,但是它提供了大量的HTML HELPER,而且还允许你自己添加Helper,比如DataGridHelper,所以在MVC框架中使用这些Helper会更方便些,不过这对于熟练工来说应该影响不大,因为实际开发中我们更多使用的是Ctrl+C/Ctrl+V,复制几个标签和复制几个Helper方法所花的时间差不多。可能对于新手来说,如果对标签不熟悉的话,用这些Helper的速度会快些,但是这样会影响新手掌握标签,真是矛盾呐。
2、数据提交
普通的ASP.Net开发,在提交数据的时候可能还需要通过设置数据绑定,或者在code-behind里写封装代码;而在MVC中,框架自动帮助你将页面上填写的数据封装到事先指定的Model中,数据提交操作在MVC框架挺方便。而且在普通ASP.NET页面中,经常会出现某个属性无法绑回去的情况,这点在MVC中应该可以得到解决。指南中提到了Routing的使用使得MVC框架下的应用程序在操作自定义查询时变得更方便,实际上在查询方面跟普通方式并没有多大区别,都是对封装好的类进行解析。至于“URL更容易理解”,现在应用程序都是从界面上点击来实现操作,很少有人会关注URL本身吧,所以这个优点不算优点。
3、单元测试
从测试上讲,MVC框架确实做得不错,若用MOCK方式测试可以更方便,一个好的WEB应用程序设计就应该将页面呈现与逻辑分开,这点普通ASP.NET应用程序也是可以做到的,关键在于设计。
4、其它
MVC框架在验证、母版页这些地方有几个新特性,但与普通ASP.NET的方式大同小异,因此不仔细说了。

2.4 小结

总的来讲,微软的 ASP.NET MVC Framework 是为了让 ASP.NET 更适合中、大型的项目,能统一规划、控管整个网站系统的流程 (用 Controller 处理),并更有效地分工开发、日后维护 (避免许多 WebForm 里重复出现相同功能的自定义函数)、管控某个功能在修改后对系统整体的影响,并将不同的功能作更明确地切割,让不同专长的技术人员各司其职,也顺便提高了代码的可读性,便于测试 (TDD, test -driven development) (减少直接绑到用户界面中的代码量),并达到「松散耦合 (loosely coupled)」,让组件易于更换和重复使用。但也因此,ASP.NET 程序员必须先改变过去,把很多业务逻辑、输入验证、页面切换…等杂七杂八的功能,全部写在 Code-Behind (aspx.cs) 里的旧习惯。

三、使用ASP.NET MVC前的准备工作

本节主要介绍下载MVC源码以及如何搭建开发环境。注意:你的PC机必须安装好了VS 2008

1、首先去官网下载ASP.NET MVC,目前最新版本为2.0,但是对于我初学而言,我决定下载1.0进行学习测试。网址为:http://www.asp.net/mvc/download/

2、下载后的文件为AspNetMVC1.msi,直接点击下一步即可。

3、然后启动2008,点击新建项目->选择Visual C#->选择Web->选择ASP.NET MVC Web Application,自己取个项目名称就可以了(具体如下图所示)。

image

图1 新建MVC应用程序

其在 VS 解决方案的结构如下图所示:

image 

图2 解决方案结构

4、点击【确定】即创建了一个默认的MVC项目.同时还会创建一个测试项目(你也可以选择不创建), 直接将Web项目中的default.aspx设置为启动页, 运行项目, 一个ASP.NET MVC的项目已经运行在我的电脑上了(具体如下图所示)。

image

图3 浏览主页

5、看到该页面的时候,恭喜你,环境搭建成功了。当然目前还不理解为什么用MVC,后面的章节将会介绍如何利用ASP.NET MVC来协助自己。 

四、ASP.NET MVC解析

如下图4所示。注意当你点击Home或者About的时候,浏览器地址为:http://localhost:1750/或者http://localhost:1750/Home/About,具体原因本章节将会慢慢解释。

图4 MVC项目首页(注意浏览器地址)

事实上该页的内容,是去捉 Views/Home 文件夹底下,的 Index.aspx 的内容来呈现。其由 Global.asax.cs 配置,并用了「URL 重写 (Url Routing)」,让用户可以按你自己定义的的规则来访问网站。

在图 3 首页的右侧,会有两个 hyperlink,可分别导向「LogOn.aspx」、「About.aspx」页面;但 hyperlink 要导向哪一个页面,不是写死在 View 的页面中 (已无 Code-Behind),而是统一由 Global.asax.cs 去定义 Routing rules,去解析当浏览器收到 URL、表单或任何 request 时,应该要扔给哪一个 Controller 自定义类去处理;再由该个被指定的 Controller (如上图2 里默认自动产生的 HomeController.cs),里面所定义的一或多个 System.Web.Mvc.ActionResult 类,以及 View 方法 (术语叫 action method),去设定要把 UI render 回哪一个 View (页面) 去,也就是本文一开始所提到的 (如图0所示),Model 2 架构是由 Controller 文件,去统一控管整个 ASP.NET 系统的流程、页面导向,而不是写死在各个 aspx.cs 文件里。
以下为 Global.asax.cs 的一部分代码,网友们可搭配参考上图2里 Controller、View 的结构去阅读:

MapRoute 方法里的三个参数,分别代表:route name、URL、Parameter。其中第一个参数 "Default",代表了项目中的 Default.aspx (不是位于 View 文件夹里)。这个 URL Routing 是为了解决用户直接访问域名时,会出现找不到文件的情形,所以要采用这个方法,将主页改成 Routing 到 Home/Index 上。因此当您在浏览器的地址栏输入:

http://localhost:端口号/Default.aspx

http://localhost:端口号

亦会导至图2中的 Views/Home/Index.aspx。

在图4的首页里,当鼠标移到右侧的 hyperlink 时,实际连结的页面名称 (某个 .aspx) 并不会直接显示在浏览器的地址栏、浏览器下方的信息栏里,因为 request「转向」的运作皆统一由 Controller 处理,亦即由图 2 中 HomeController.cs 里,配置的 System.Web.Mvc.ActionResult 类的 actionName 去指定,因此浏览器的网址仍会维持 Site.Master (MasterPage) 里的 Html.ActionLink 绑定,所配置的 actionName (即下方两行代码的第二个参数 "Index"、"About"),而不会如过去 ASP.NET 1.x / 2.0 般,直接在地址栏里,显示某一个 .aspx 的页面名称。

以下为 Site.master 的代码:

Controller 除了用来控管整个网站的流程转向外,事实上还能避免大量的代码重复,亦即统一处理一些系统可「共享」的功能,例如:验证用户身份、输入验证 (validate)、Session 管理,或是像购物网站中,当购物车里物品的添加、修改、移除时,任何用户皆相同的「共通逻辑」处理;以及要结帐时,去做购物数量、单价相乘的计算动作,或将某个存储购物明细的 Collection 数据结构对象加入 Session,最后再转向某一个页面 (View)。

也许你对于本文讲解的概念有些模糊,下面我们看看简单的程序是怎么写的,我们打开Controller/HomeController.cs,代码如下:

请大家从上述代码中体会一下View/Action/Controller的关系。

现存有个问题,我如果想看到Index.aspx和About.aspx的页面我们应该怎么办呢? 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值