第17章ASP.NETMVC基础在ASP.NET应用程序开发中,开发人员很难将ASP.NET应用程序进行良好分层并使相应的页面进行相应的输出,例如页面代码只进行页面布局和样式的输出而代码页面只负责进行逻辑的处理。为了解决这个问题,微软开发了MVC开发模式方便开发人员进行分层开发。17.1了解MVCMVC是一个设计模式,MVC能够将ASP.NET应用程序的视图、模型和控制器进行分开,开发人员能够在不同的层次中进行应用程序层次的开发,例如开发人员能够在视图中进行页面视图的开发,而在控制器中进行代码的实现。17.1.1MVC和WebForm在ASP.NETWebForm的开发当中,用户能够方便的使用微软提供的服务器控件进行应用程序的开发,从而提高开发效率。虽然ASP.NETWebForm提高了开发速度、维护效率和代码的复用性,但是ASP.NET现有的编程模型抛弃了传统的网页编程模型,在很多应用问题的解决上反而需要通过复杂的实现完成。在ASP.NETMVC模型中,ASP.NETMVC模型给开发人员的感觉仿佛又回到了传统的网页编程模型中(如ASP编程模型),但是ASP.NETMVC模型与传统的ASP同样是不同的编程模型,因为ASP.NETMVC模型同样是基于面向对象的思想进行应用程序的开发。相比之下,ASP.NETMVC模型是一种思想,而不是一个框架,所以ASP.NETMVC模型与ASP.NETWebForm并不具有可比性。同样ASP.NETMVC模型也不是ASP.NETWebForm4.0,这两个开发模型就好比一个是汽车一个是飞机,而两者都能够达到同样的目的。ASP.NETMVC模型是另一种Web开发的实现思路,其实现的过程并不像传统的ASP.NET应用程序一样。当用户通过浏览器请求服务器中的某个页面时,其实是实现了ASP.NETMVC模型中的一个方法,而不是具体的页面,这在另一种程度上实现了URL伪静态。当用户通过浏览器请求服务器中的某一个路径时,ASP.NETMVC应用程序会拦截相应的地址并进行路由解析,通过应用程序中编程实现展现一个页面给用户,这种页面展现手法同传统的ASP.NETWebFrom应用程序与其他的如ASP,PHP等应用程序都不相同。同时,随着互联网的发展,搜索引擎在Web开发中起着重要的作用,这就对页面请求的地址有了更加严格的要求。例如百度、谷歌等搜索引擎会对目录形式的页面路径和静态形式的页面路径收录的更好,而对于动态的如abc.aspx?id=1&action=add&t=3这种样式的页面路径不甚友好。另外,所有引擎又在一定程度上决定了Web应用的热度,例如当在百度中搜索“鞋”这个关键字时,如果搜索的结果中客户的网站在搜索结果的后几页,用户通常不会进行翻页查询,相比之下用户更喜欢在搜索结果中查看前几页的内容。ASP.NETMVC开发模型在用户进行页面请求时会进行URL拦截并通过相应的编程实现访问路径433和页面的呈现,这样就能够更加方便的实现目录形式的页面路径和静态形式,对于Web应用动态的地址如abc.aspx?id=1&action=add&t=3可以以abc/action/id/add的形式呈现,这样就更加容易的被搜索引擎所搜录。注意:ASP.NETMVC模型和ASP.NETWebForm并不具备可比性,因为ASP.NETMVC模型和ASP.NETWebForm是不同的开发模型,而ASP.NETMVC模型和ASP.NETWebForm在各自的应用上都有有点和缺点,并没有哪个开发模型比另一个模型好之说。17.1.2ASP.NETMVC的运行结构在ASP.NETMVC开发模型中,页面的请求并不是像传统的Web应用开发中的请求一样是对某个文件进行访问,初学者可能会在一开始觉得非常的不适应。例如当用户访问/home/abc.aspx时,在服务器的系统目录中一定会存在abc.aspx这个页面,而对于传统的页面请求的过程也非常容易理解,因为在服务器上只有存在了home文件夹,在home文件夹下一定存在abc.aspx页面才能够进行相应的页面访问。对于ASP.NETMVC开发模型而言,当请求URL路径为“/home/abc.aspx”时,也许在服务器中并不存在相应的abc.aspx页面,而可能是服务器中某个方法。在ASP.NETMVC应用程序中,页面请求的地址不能够按照传统的概念进行分析,要了解ASP.NETMVC应用程序的页面请求地址就需要了解ASP.NETMVC开发模型的运行结构。ASP.NETMVC开发模型的运行结构如图17-1所示。图17-1ASP.NETMVC开发模型正如图17-1所示,ASP.NETMVC开发模型包括三个模块,这三个模块分别为MVC的M、V、C,其中M为Models(模型)、V为Views(视图)、C为Controllers(控制器),在ASP.NETMVC开发模型中,这三个模块的作用分别如下所示。Models:Models负责与数据库进行交互,在ASP.NETMVC框架中,使用LINQ进行数据库连接和操作。Views:Views负责页面的页面呈现,包括样式控制,数据的格式化输出等。Controllers:Controllers负责处理页面的请求,用户呈现相应的页面。434与传统的页面请求和页面运行方式不同的是,ASP.NETMVC开发模型中的页面请求首先会发送到Controllers中,Controllers再通过Models进行变量声明和数据读取。Controller通过页面请求和路由设置呈现相应的View给浏览器,用户就能够在浏览器中看到相应的页面。这里讲解ASP.NETMVC开发模型的工作流程可能会让读者感到困惑,具体ASP.NETMVC开发模型的工作流程会在后面详细讲解。17.2ASP.NETMVC基础ASP.NETMVC开发模型和ASP.NETWebFrom开发模型并不相同,ASP.NETMVC为ASP.NETWeb开发进行了良好的分层,ASP.NETMVC开发模型和ASP.NETWebFrom开发模型在请求处理和应用上都不尽相同,只有了解ASP.NETWebFrom开发模型的基础才能够高效的开发MVC应用程序。17.2.1安装ASP.NETMVCASP.NETMVC是微软推出的最新的ASP.NETWeb开发模型,开发人员可以在微软的官方网站上下载ASP.NETMVC安装程序,也能够使用光盘中附属的ASP.NETMVC安装程序进行安装,光盘中附带的是ASP.NETMVCbeta版本,正式版同beta版本基本上没有任何区别,开发人员可以在官方网站下载最新的安装程序。单击下载或附录中的AspNetMVCBeta-setup.msi进行ASP.NETMVC开发模型的安装和相应示例的安装,如图17-2所示。用户单击ASP.NETMVC安装界面中的【Next】按钮进入ASP.NETMVC安装的用户条款界面,单击【IacceptthetermsinttheLicenseAgreement】复选框同意ASP.NETMVC用户条款,如图17-3所示。同意后单击【Next】按钮进入ASP.NETMVC安装准备界面,进入安装界面后单击【Install】按钮进行安装。图17-2ASP.NETMVC安装界面图17-3ASP.NETMVC用户条款注意:在安装ASP.NETMVC前必须安装VisualStudio2008进行ASP.NETMVC应用程序的开发,安装完成ASP.NETMVC应用程序后就能够在VisualStudio2008进行创建ASP.NETMVC应用程序。单击【Install】按钮应用程序,系统就会在计算机中安装ASP.NETMVC开发模型和VisualStudio2008中进行ASP.NETMVC程序开发所需要的必备组件以便在VisualStudio2008为开发人员提供原生的ASP.NETMVC开发环境。安装完毕后,安装程序会提示ASP.NETMVC安装程序已经安装完毕,安装435完毕后开发人员就能够使用VisualStudio2008开发ASP.NETMVC应用程序。安装过程如图17-4和17-5所示。图17-4ASP.NETMVC安装图17-5ASP.NETMVC安装完毕17.2.2新建一个MVC应用程序安装完成ASP.NETMVC开发模型后就能够在VisualStudio2008中创建ASP.NETMVC应用程序进行ASP.NETMVC应用程序的开发,安装ASP.NETMVC开发模型后,VisualStudio2008就能够为ASP.NETMVC提供原生的开发环境。在菜单栏中选择【文件】选项,单击【文件】选项在下拉菜单中选择【新建项目】就能够创建ASP.NETMVC应用程序,如图17-6所示。单击【确定】按钮后就能够创建ASP.NETMVC应用程序。VisualStudio2008为ASP.NETMVC提供了原生的开发环境,以及智能提示,开发人员在进行ASP.NETMVC应用程序开发中,VisualStudio2008同样能够为ASP.NETMVC应用程序提供关键字自动补完、智能解析等功能以便开发人员高效的进行ASP.NETMVC应用程序的开发。创建ASP.NETMVC应用程序后,系统会自动创建若干文件夹和文件,如图17-7所示。图17-6创建ASP.NETMVC应用程序图17-7自动创建的文件在自动创建的文件中,这些文件包括ASP.NETMVC应用程序中最重要的文件夹用于分层开发,这些文件夹分别为Models、Views和Controllers,分别对应ASP.NETMVC开发模型的Models(模型)、436Views(视图)、Controller(控制器),开发人员能够在相应的文件夹中创建文件进行ASP.NETMVC应用程序的开发。17.2.3ASP.NETMVC应用程序的结构在创建完成ASP.NETMVC应用程序,系统会默认创建一些文件夹,这些文件夹不仅包括对应ASP.NETMVC开发模型的Models、Views和Controllers文件夹,还包括配置文件Web.config、Global.aspx和Default.aspx。1.Default.aspx:页面驱动Default.aspx用于ASP.NETMVC应用程序程序的驱动,当用户执行相应的请求时,Default.aspx能够驱动ASP.NETMVC应用程序页面的处理和生成,Default.aspx页面代码如下所示。%@PageLanguage=C#AutoEventWireup=trueCodeBehind=Default.aspx.csInherits=_17_1._Default%Default.aspx页面代码同传统的ASP.NETWebForm基本相同,但Default.aspx只是用于MVC应用程序的驱动。Default.aspx使用IHttpHandler类获取和发送HTTP请求,Default.aspx.cs页面代码如下所示。usingSystem.Web;usingSystem.Web.Mvc;//使用Mvc命名空间usingSystem.Web.UI;namespace_17_1{publicpartialclass_Default:Page{publicvoidPage_Load(objectsender,System.EventArgse){HttpContext.Current.RewritePath(Request.ApplicationPath);//拦截虚拟目录根路径IHttpHandlerhttpHandler=newMvcHttpHandler();httpHandler.ProcessRequest(HttpContext.Current);}}}上述代码用于ASP.NETMVC应用程序的驱动。在ASP.NETMVC应用程序被运行时,会拦截虚拟目录的根路径将请求发送到Controllers实现。2.Global.asax:全局配置文件Global.a