【asp源码栏目提醒】:网学会员鉴于大家对asp源码十分关注,论文会员在此为大家搜集整理了“ASP NET MVC基础 - 编程语言”一文,供大家参考学习
第17章
ASP.NET MVC基础 在
ASP.NET应用程序开发中开发人员很难将
ASP.NET应用程序进行良好分层并使相应的页面进行相应的输出例如页面代码只进行页面布局和样式的输出而代码页面只负责进行逻辑的处理。
为了解决这个问题微软开发了MVC开发模式方便开发人员进行分层开发。
17.1 了解MVC MVC是一个设计模式MVC能够将
ASP.NET应用程序的视图、模型和控制器进行分开开发人员能够在不同的层次中进行应用程序层次的开发例如开发人员能够在视图中进行页面视图的开发而在控制器中进行代码的实现。
17.1.1 MVC和Web Form 在
ASP.NET Web Form的开发当中用户能够方便的使用微软提供的服务器控件进行应用程序的开发从而提高开发效率。
虽然
ASP.NET Web Form提高了开发速度、维护效率和代码的复用性但是
ASP.NET现有的编程模型抛弃了传统的网页编程模型在很多应用问题的解决上反而需要通过复杂的实现完成。
在
ASP.NET MVC模型中
ASP.NET MVC模型给开发人员的感觉仿佛又回到了传统的网页编程模型中如
ASP编程模型但是
ASP.NET MVC模型与传统的
ASP同样是不同的编程模型因为
ASP.NET MVC模型同样是基于面向对象的思想进行应用程序的开发。
相比之下
ASP.NET MVC模型是一种思想而不是一个框架所以
ASP.NET MVC模型与
ASP.NET Web Form并不具有可比性。
同样
ASP.NET MVC模型也不是
ASP.NET Web Form 4.0这两个开发模型就好比一个是汽车一个是飞机而两者都能够达到同样的目的。
ASP.NET MVC模型是另一种Web开发的实现思路其实现的过程并不像传统的
ASP.NET应用程序一样。
当用户通过浏览器请求服务器中的某个页面时其实是实现了
ASP.NET MVC模型中的一个方法而不是具体的页面这在另一种程度上实现了URL伪静态。
当用户通过浏览器请求服务器中的某一个路径时
ASP.NET MVC应用程序会拦截相应的地址并进行路由解析通过应用程序中编程实现展现一个页面给用户这种页面展现手法同传统的
ASP.NET Web From应用程序与其他的如ASPPHP等应用程序都不相同。
同时随着互联网的发展搜索引擎在Web开发中起着重要的作用这就对页面请求的地址有了更加严格的要求。
例如百度、谷歌等搜索引擎会对目录形式的页面路径和静态形式的页面路径收录的更好而对于动态的如abc.aspxid1ampactionaddampt3这种样式的页面路径不甚友好。
另外所有引擎又在一定程度上决定了Web应用的热度例如当在百度中搜索“鞋”这个关键字时如果搜索的结果中客户的网站在搜索结果的后几页用户通常不会进行翻页查询相比之下用户更喜欢在搜索结果中查看前几页的内容。
ASP.NET MVC开发模型在用户进行页面请求时会进行URL拦截并通过相应的编程实现访问路径 433 和页面的呈现这样就能够更加方便的实现目录形式的页面路径和静态形式对于Web应用动态的地址如abc.aspxid1ampactionaddampt3可以以abc/action/id/add的形式呈现这样就更加容易的被搜索引擎所搜录。
注意
ASP.NET MVC模型和
ASP.NET Web Form并不具备可比性因为
ASP.NET MVC模型和
ASP.NET Web Form是不同的开发模型而
ASP.NET MVC模型和
ASP.NET Web Form在各自的应用上都有有点和缺点并没有哪个开发模型比另一个模型好之说。
17.1.2
ASP.NET MVC的运行结构 在
ASP.NET MVC开发模型中页面的请求并不是像传统的Web应用开发中的请求一样是对某个文件进行访问初学者可能会在一开始觉得非常的不适应。
例如当用户访问/home/abc.aspx时在服务器的系统目录中一定会存在abc.aspx这个页面而对于传统的页面请求的过程也非常容易理解因为在服务器上只有存在了home文件夹在home文件夹下一定存在abc.aspx页面才能够进行相应的页面访问。
对于
ASP.NET MVC开发模型而言当请求URL路径为“/home/abc.aspx”时也许在服务器中并不存在相应的abc.aspx页面而可能是服务器中某个方法。
在
ASP.NET MVC应用程序中页面请求的地址不能够按照传统的概念进行分析要了解
ASP.NET MVC应用程序的页面请求地址就需要了解
ASP.NET MVC开发模型的运行结构。
ASP.NET MVC开发模型的运行结构如图17-1所示。
图17-1
ASP.NET MVC开发模型 正如图17-1所示
ASP.NET MVC开发模型包括三个模块这三个模块分别为MVC的M、V、C其中M为Models模型、V为Views视图、C为Controllers控制器在
ASP.NET MVC开发模型中这三个模块的作用分别如下所示。
ModelsModels负责与数据库进行交互在
ASP.NET MVC框架中使用LINQ进行数据库连接和操作。
ViewsViews负责页面的页面呈现包括样式控制数据的格式化输出等。
ControllersControllers负责处理页面的请求用户呈现相应的页面。
434 与传统的页面请求和页面运行方式不同的是
ASP.NET MVC开发模型中的页面请求首先会发送到Controllers中Controllers再通过Models进行变量声明和数据读取。
Controller通过页面请求和路由设置呈现相应的View给浏览器用户就能够在浏览器中看到相应的页面。
这里讲解
ASP.NET MVC开发模型的工作流程可能会让读者感到困惑具体
ASP.NET MVC开发模型的工作流程会在后面详细讲解。
17.2
ASP.NET MVC基础
ASP.NET MVC开发模型和
ASP.NET Web From开发模型并不相同
ASP.NET MVC为
ASP.NET Web开发进行了良好的分层
ASP.NET MVC开发模型和
ASP.NET Web From开发模型在请求处理和应用上都不尽相同只有了解
ASP.NET Web From开发模型的基础才能够高效的开发MVC应用程序。
17.2.1 安装
ASP.NET MVC
ASP.NET MVC是微软推出的最新的
ASP.NET Web开发模型开发人员可以在微软的官方网站上下载
ASP.NET MVC安装程序也能够使用光盘中附属的
ASP.NET MVC安装程序进行安装光盘中附带的是
ASP.NET MVC beta版本正式版同beta版本基本上没有任何区别开发人员可以在官方网站下载最新的安装程序。
单击下载或附录中的AspNetMVCBeta-setup.msi进行
ASP.NET MVC开发模型的安装和相应示例的安装如图17-2所示。
用户单击
ASP.NET MVC安装界面中的【Next】按钮进入
ASP.NET MVC安装的用户条款界面单击【I accept the terms int the License Agreement】复选框同意
ASP.NET MVC用户条款如图17-3所示。
同意后单击【Next】按钮进入
ASP.NET MVC安装准备界面进入安装界面后单击【Install】按钮进行安装。
图17-2
ASP.NET MVC安装界面 图17-3
ASP.NET MVC用户条款 注意在安装
ASP.NET MVC前必须安装Visual Studio 2008进行
ASP.NET MVC应用程序的开发安装完成
ASP.NET MVC应用程序后就能够在Visual Studio 2008进行创建
ASP.NET MVC应用程序。
单击【Install】按钮应用程序系统就会在计算机中安装
ASP.NET MVC开发模型和Visual Studio 2008中进行
ASP.NET MVC程序开发所需要的必备组件以便在Visual Studio 2008为开发人员提供原生的
ASP.NET MVC开发环境。
安装完毕后安装程序会提示
ASP.NET MVC安装程序已经安装完毕安装 435 完毕后开发人员就能够使用Visual Studio 2008开发
ASP.NET MVC应用程序。
安装过程如图17-4和17-5所示。
图17-4
ASP.NET MVC安装 图17-5
ASP.NET MVC安装完毕 17.2.2 新建一个MVC应用程序 安装完成
ASP.NET MVC开发模型后就能够在Visual Studio 2008中创建
ASP.NET MVC应用程序进行
ASP.NET MVC应用程序的开发安装
ASP.NET MVC开发模型后Visual Studio 2008就能够为
ASP.NET MVC提供原生的开发环境。
在菜单栏中选择【文件】选项单击【文件】选项在下拉菜单中选择【新建项目】就能够创建
ASP.NET MVC应用程序如图17-6所示。
单击【确定】按钮后就能够创建
ASP.NET MVC应用程序。
Visual Studio 2008为
ASP.NET MVC提供了原生的开发环境以及智能提示开发人员在进行
ASP.NET MVC应用程序开发中Visual Studio 2008同样能够为
ASP.NET MVC应用程序提供关键字自动补完、智能解析等功能以便开发人员高效的进行
ASP.NET MVC应用程序的开发。
创建
ASP.NET MVC应用程序后系统会自动创建若干文件夹和文件如图17-7所示。
图17-6 创建
ASP.NET MVC应用程序 图17-7 自动创建的文件 在自动创建的文件中这些文件包括
ASP.NET MVC应用程序中最重要的文件夹用于分层开发这些文件夹分别为Models、Views和Controllers分别对应
ASP.NET MVC开发模型的Models模型、 436 Views视图、Controller控制器开发人员能够在相应的文件夹中创建文件进行
ASP.NET MVC应用程序的开发。
17.2.3
ASP.NET MVC应用程序的结构 在创建完成
ASP.NET MVC应用程序系统会默认创建一些文件夹这些文件夹不仅包括对应
ASP.NET MVC开发模型的Models、Views和Controllers文件夹还包括配置文件Web.config、Global.aspx和Default.aspx。
1Default.aspx页面驱动 Default.aspx用于
ASP.NET MVC应用程序程序的驱动当用户执行相应的请求时Default.aspx能够驱动
ASP.NET MVC应用程序页面的处理和生成Default.aspx页面代码如下所示。
lt Page LanguagequotCquot AutoEventWireupquottruequot CodeBehindquotDefault.aspx.csquot Inheritsquot_17_1._Defaultquot gt Default.aspx页面代码同传统的
ASP.NET Web Form基本相同但Default.aspx只是用于MVC应用程序的驱动。
Default.aspx使用IHttpHandler类获取和发送HTTP请求Default.aspx.cs页面代码如下所示。
using System.Web using System.Web.Mvc //使用Mvc命名空间 using System.Web.UI namespace _17_1 public partial class _Default : Page public void Page_Loadobject sender System.EventArgs e HttpContext.Current.RewritePathRequest.ApplicationPath //拦截虚拟目录根路径 IHttpHandler httpHandler new MvcHttpHandler httpHandler.ProcessRequestHttpContext.Current 上述代码用于
ASP.NET MVC应用程序的驱动。
在
ASP.NET MVC应用程序被运行时会拦截虚拟目录的根路径将请求发送到Controllers实现。
2Global.asax全局配置文件 Global.asax是全局配置文件在
ASP.NET MVC应用程序中的应用程序路径是通过Global.asax文件进行配置和实现的Global.asax页面代码如下所示。
using System using System.Collections.Generic using System.Linq using System.Web using System.Web.Mvc //使用Mvc命名空间 using System.Web.Routing //使用Mvc命名空间 namespace _17_1 // Note: For instructions on enabling IIS6 or IIS7 classic mode 437 // visit http://go.microsoft.com/LinkId9394801 public class MvcApplication : System.Web.HttpApplication public static void RegisterRoutesRouteCollection routes routes.IgnoreRoutequotresource.axd/pathInfoquot routes.MapRoute quotDefaultquot //配置路由名称 quotcontroller/action/idquot //配置访问规则 new controller quotHomequot action quotIndexquot id quotquot //为访问规则配置默认值 //配置URL路由 protected void Application_Start RegisterRoutesRouteTable.Routes 上述代码在应用程序运行后能够实现相应的URL映射当用户请求一个页面时该页面会在运行时启动并指定
ASP.NET MVC应用程序中URL的映射以便将请求提交到Controllers进行相应的编程处理和页面呈现。
Global.asax实现了伪静态的URL配置例如当用户访问/home/guestbook/number服务器路径时Global.asax通过URLRouting够实现服务器路径/home/guestbook/number到number.aspx的映射。
有关URLRouting的知识会在后面的小结中讲解。
注意在
ASP.NET MVC开发模型中浏览器地址栏的URL并不能够被称为是伪静态为了方便读者的理解可以暂时称为伪静态但是最主要的是要理解访问的路径并不像传统的Web开发中那样是访问真实的某个文件。
3Models、Views和Controllers三层结构 Models、Views和Controllers文件夹是
ASP.NET MVC开发模型中最为重要的文件夹虽然这里以文件夹的形式呈现在解决方案管理器中其实并不能看作传统的文件夹。
Models、Views和Controllers分别用于存放
ASP.NET MVC应用程序中Models、Views和Controllers的开发文件。
在创建
ASP.NET MVC应用程序后系统会自行创建相应的文件这里也包括
ASP.NET MVC应用程序样例如图17-8和图17-9所示。
438 图17-8 Views视图文件夹 图17-9 Controllers控制器文件夹 正如图17-8、17-9所示在样例中分别创建了若干Controllers控制器文件以及Views页面文件。
运行
ASP.NET MVC应用程序后用户的请求会发送到Controllers控制器中Controllers控制器接受用户的请求并通过编程实现Views页面文件的映射。
17.2.4 运行
ASP.NET MVC应用程序 创建
ASP.NET MVC应用程序后就能够直接运行
ASP.NET MVC应用程序默认的
ASP.NET MVC应用程序已经提供了样例方便开发人员进行编程学习单击【F5】运行
ASP.NET MVC应用程序运行后如图17-10所示。
在创建
ASP.NET MVC应用程序后系统会创建样例图17-10显式的就是
ASP.NET MVC默认运行界面单击旁边的【About Us】连接页面跳转到相应的页面如图17-11所示。
图17-10
ASP.NET MVC应用程序初始界面 图17-11 About页面 当单击【About Us】链接后页面会跳转到关于页面页面URL为http://localhost:2448/Home/About。
在
ASP.NET MVC应用程序中URL路径的请求方式与传统的
ASP.NET Web Form应用程序不同开发人员可以发现在服务器文件中并没有/Home/About/index.aspx文件也没有/Home/About/这个目录。
注意在
ASP.NET MVC应用程序中这里再三强调其URL并不是服务器中的某个文件而是一种地址映射。
在服务器中没有/Home/About/index.aspx文件也没有/Home/About/这个目录因为/Home/About中所呈现的页面是通过Controller控制器和Global.ascx进行相应的文件的路径的映射的关于地址映射的内 439 容会在后面的小结中详细讲解。
17.3
ASP.NET MVC原理 运行了
ASP.NET MVC应用程序后就能够通过相应的地址访问不同的页面。
在
ASP.NET MVC应用程序中应用程序中页面的URL并不是在服务器中实际存在的页面或目录而是访问了相应的方法
ASP.NET MVC应用程序通过Global.ascx和Controllers实现了URL映射。
17.3.1
ASP.NET MVC运行流程 在运行
ASP.NET MVC应用程序后会发现访问不同的
ASP.NET MVC应用程序页面时其URL路径并不会呈现相应的.aspx后缀。
同样当访问相应的
ASP.NET MVC应用程序页面在服务器中并不存在对应的页面。
为了了解如何实现页面映射就需要了解
ASP.NET MVC应用程序的运行流程。
在
ASP.NET MVC程序中应用程序通过Global.ascx和Controllers实现了URL映射。
当用户进行
ASP.NET MVC程序的页面请求时该请求首先会会被发送到Controllers控制器中开发人员能够在控制器Controllers中创建相应的变量并将请求发送到Views视图中Views视图会使用在Controllers控制器中通过编程方式创建相应的变量并呈现页面在浏览器中。
当用户在浏览器中对Web应用进行不同的页面请求时该运行过程将会循环反复。
对于Models而言Controller通常情况下使用Models读取数据库。
在Models中Models能够将传统的关系型数据库映射成面向对象的开发模型开发人员能够使用面向对象的思想进行数据库的数据存取。
Controllers从Model中读取数据并存储在相应的变量中如图17-12所示。
图17-12
ASP.NET MVC运行流程 正如图17-12所示在用户进行页面请求时首先这个请求会发送到Controllers中Controllers从Models中读取相应的数据并填充Controllers中的变量Controllers接受相应请求再将请求发送到Views中Views通过获取Controllers中的变量的值进行整合并生成相应的页面到用户浏览器中。
440 在Models中需要将数据库抽象成面向对象中的一个对象开发人员能够使用LINQ进行数据库的抽象这样就能够方便的将数据库中的数据抽象成相应的对象并通过对象的方法进行数据的存取和更新。
17.3.2
ASP.NET MVC工作原理 正如上一节中讲解的
ASP.NET MVC工作流程在
ASP.NET MVC应用程序中系统默认创建了相应的文件夹进行不同层次的开发在
ASP.NET MVC应用程序的运行过程中同样请求会发送到Controllers中这样就对应了
ASP.NET MVC应用程序中的Controllers文件夹Controllers只负责数据的读取和页面逻辑的处理。
在Controllers读取数据时需要通过Models中的LINQ to SQL从数据中读取相应的信息读取数据完毕后Controllers再将数据和Controller整合并提交到Views视图中整合后的页面将通过浏览器呈现在用户面前。
当用户访问http://localhost:2448/Home/About页面时首先这个请求会发送到Controllers中Controllers通过Global.ascx文件中的路由设置进行相应的URL映射Global.ascx文件相应代码如下所示。
public static void RegisterRoutesRouteCollection routes //注册路由 routes.IgnoreRoutequotresource.axd/pathInfoquot routes.MapRoute quotDefaultquot quotcontroller/action/idquot new controller quotHomequot action quotIndexquot id quotquot //配置路由 上述代码中实现了映射操作具体是如何实现可以先无需关心首先需要看看Controllers文件夹内的文件以及Views文件夹的文件如图17-13所示。
图17-13 Controller文件夹和Views文件夹 从图17-13中可以看出在Views中包含Home文件夹在Home文件夹中存在About.aspx和Index.aspx文件而同样在Controllers文件夹中包含与Home文件夹同名的HomeController.cs文件。
当用户访问http://localhost:2448/Home/About路径时首先该路径请求会传送到Controller中。
441 注意在Controllers文件夹中创建HomeController.cs文件同Home是同名文件在Controllers中创建的文件其文件名后的Controller.cs是不能更改的所以HomeController.cs文件也可以看做是Home文件夹的同名文件。
在Controller中Controller通过Global.ascx文件和相应的编程实现路径的映射示例代码如下所示。
HandleError public class HomeController : Controller public ActionResult About //实现About页面 ViewDataquotTitlequot quotAbout Pagequot return View //返回视图 上述代码实现了About页面的页面呈现在运行相应的方法后会返回一个View这里默认返回的是与Home的About方法同名的页面这里是about.aspxabout.aspx页面代码如下所示。
lt Page LanguagequotCquot MasterPageFilequot/Views/Shared/Site.Masterquot AutoEventWireupquottruequot CodeBehindquotAbout.aspx.csquot Inheritsquot_17_1.Views.Home.Aboutquot gt ltasp:Content IDquotaboutContentquot ContentPlaceHolderIDquotMainContentquot runatquotserverquotgt lth2gtAbout Uslt/h2gt ltpgt TODO: Put ltemgtaboutlt/emgt content here. lt/pgt lt/
asp:Contentgt 将about.aspx页面中的文字进行相应的更改示例代码如下所示。
ltasp:Content IDquotaboutContentquot ContentPlaceHolderIDquotMainContentquot runatquotserverquotgt lth2gtAbout Uslt/h2gt ltpgt ltspan style”color:red”gt这是一个关于页面lt/spangt lt/pgt lt/
asp:Contentgt 运行about.aspx页面运行后如图17-14所示。
442 图17-14 修改后的About Us页面 从上述代码可以看出Controllers与Global.ascx用于URL的映射而Views用于页面的呈现。
从这里可以看出当用户访问http://localhost:2448/Home/About页面时访问的并不是服务器中的/Home/About页面而访问的是Controllers中的HomeControllers的About方法。
注意
ASP.NET MVC应用程序中的URL路径访问的并不是一个页面而是一个方法例如访问/Home/About页面就是访问的是HomeControllers中的About方法而访问/Account/Login页面就是访问的是AccountC.
上一篇:
ASPNET开发应用课程教学大纲
下一篇:
经典高三励志演讲稿