




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,第20章ASP.NETMVC应用程序,2,.,本章重点,路由控制器视图,3,.,20.1MVC概述,MVC是Model-View-Controller的缩写,即把一个Web应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求。模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。控制层并不做任何的数据处理。一个模型可能对应多个视图,一个视图可能对应多个模型。,4,.,20.1MVC概述,模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。,5,.,20.1MVC概述,MVC设计模式存在如下优点:可以为一个模型在运行时同时建立和使用多个视图。视图与控制器的可接插性,允许更换视图和控制器对象,甚至在运行期间进行对象替换。模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。,6,.,20.2ASP.NETMVC,ASP.NETMVC框架为创建基于MVC设计模式的Web应用程序提供了设计框架和技术基础。它是一个轻量级的、高度可测试的演示框架,并且它结合了现有的ASP.NET特性(如母版页等)。MVC框架被定义在Sytem.Web.Mvc命名空间,并且是被Sytem.Web命名空间所支持的。,7,.,20.2ASP.NETMVC,ASP.NETMVC框架具有如下一些特性:ASP.NETMVC框架深度整合许多用户熟悉的平台特性,如运行时、身份验证、安全性、缓存和配置特性等。整个架构是基于标准组件的,所以开发人员可以根据自己的需要分解或替换每个组件。ASP.NETMVC框架使用用户熟悉的ASPX和ASCX文件进行开发,然后在运行时生成HTML的方式,并且实现了母版嵌套特性。在这个框架中,URL将不再映射到ASPX文件,而是映射到一些控制类(controllerclasses)。.NETMVC框架实现了System.Web.IHttpRequest和IHttpResponse接口,这使得单元测试能力得到了增强。在进行测试时,不必再通过Web请求,单元测试可以撇开控制器而直接进行。可以在没有ASP.NET运行环境的机器上进行单元测试。,8,.,20.2ASP.NETMVC,ASP.NETMVC框架应用程序则把URLs映射到服务器代码,它不是把URLs映射到ASP.NET页面或处理器,而是把URLs映射到控制器类。控制器类处理传入的诸如用户输入和交互请求,并执行相应的应用程序和数据逻辑,最后控制器类通常调用视图组件来生成HTML输出。通过项目模板“ASP.NETMVCWebApplication”创建ASP.NETMVC网站时,根据ASP.NETMVC框架的规定,ASP.NETMVC应用程序将模型、视图和控制器组件及其他内容分别放在不同的项目目录中,以便开发者维护和管理。,9,.,20.2ASP.NETMVC,利用ASP.NETMVC框架创建出的网站项目会自动生成这些文件夹和文件:1.App_Data文件夹它用来存储数据,与基于Web表单的ASP.NETWeb应用程序中的App_Data文件夹具有相同的功能。2.Content文件夹它存放应用程序需要的一些静态的资源文件,如图片、CSS样式文件等。3.Scripts文件夹它存放JavaScript等脚本文件。4.Models文件夹模型组件一般存放在Models文件夹中,例如LINQtoSQL类或者ADO.NETEntityDataModel就可以存放在该目录中,该目录还可以存放有关数据访问操作的一些类、对象的定义等。,10,.,20.2ASP.NETMVC,5.Views文件夹视图组件一般存放在Views文件夹中,可以存放的类型包括:.aspx页面、.ascx控件及.master母版页等。这里需要说明的是对每一个控制器,在View文件夹中都有一个与控制器对应的目录。6.Shared文件夹对于视图组件中的公用部分,可以创建一个名为“Shared”的文件夹,该目录不属于单个的控制器,而是属于所有的控制器,在Shared中可以存放母版页、CSS样式表等文件。7.Controllers文件夹控制器组件一般存放在Controllers文件夹中,控制器的命名约定采用XXXController的方式。,11,.,20.2ASP.NETMVC,在一个MVCWeb项目执行过程中,将经历如下几个阶段:1.获取第一个请求。在Global.asax文件中,Route对象被添加到RouteTable对象中。2.执行路由。UrlRoutingModule对象使用RouteTable集合中第一个匹配的Route对象以创建RouteData对象,利用这个对象以生成RequestContext对象(IHttpContext对象)。3.创建MVC请求处理。MvcRouteHandler对象创建一个MvcHandler类的实例,并把它传递到RequestContext实例。4.创建控制器。MvcHandler对象使用RequestContext实例去确认IControllerFactory对象以创建控制器实例。5.执行控制器。MvcHandler实例调用控制器的可以执行方法。6.触发行为。很多控制器都继承自Controller基础类,而同控制器结合在一起的ControllerActionInvoker对象来决定控制器类调用哪个方法并调用这个方法。7.执行结果。一个典型的行为方法可能接收用户输入,准备适当响应数据,并通过返回一个结果类型来执行结果。,12,.,20.3路由,URL路由(URLRouting),指的是在基于ASP.NETMVC的网站中,URL不再是文件目录中的一个文件,而是一个说明有关URL路由的字符串,开发者可以自行定义该字符串的格式,方便使用者理解相关的页面功能。20.3.1定义路由定义URL路由,就是设置URL模式。在URL路由中,通过大括号“”定义占位符,这些占位符就是URL路由的参数,而字符中的“/”“.”等符号则被作为分隔符被URL路由解析这些离散的数据,对于不在小括号或者方括号中的信息则被视为一个常量。比如:controller/action/id/有效的URL路由定义/Products/show/beverages/匹配的路由代码说明:定义了含有3个URL路由参数的URL路由,此时Products就是控制器的名称,show就是该控制器中所定义的一个方法,而beverages则是一个id变量。,13,.,20.3路由,20.3.1定义路由路由的添加是在文件Global.asax的Application_Start事件的处理器函数中进行的,这样可以确保当应用程序启动时路由是可用的,并且在对应用程序进行单元测试时还支持直接调用该方法。如果想在单元测试应用程序时直接调用它,那么,必须把注册路由的方法设置为静态的,并且为其提供一个参数RouteCollection。通过把各个路由添加到RouteTable类的静态Routes属性中实现最终添加路由。其中,属性Routes是一个RouteCollection对象,它存储了ASP.NET应用程序所有的路由。,14,.,20.3路由,20.3.1定义路由文件Global.asax中的代码片断:protectedvoidApplication_Start(objectsender,EventArgse)RegisterRoutes(RouteTable.Routes);publicstaticvoidRegisterRoutes(RouteCollectionroutes)routes.Add(newRoute(“Category/action/categoryName”/定义路由方式,newCategoryRouteHandler()/默认路由);代码说明:添加了一个Route对象,此对象中定义了两个名字,分别为action和categoryName的URL参数。,15,.,20.3路由,20.3.2默认的路由当定义一个路由时,可以把一个默认的值赋给一个参数。如果URL中没有提供此参数值,那么将使用此默认值。为一个路由设置默认值,可以通过把一个字典赋值给Route类的Defaults属性来实现。Defaults=newRouteValueDictionary/默认的地址categoryName,food,action,show代码说明:创建了所定义的URL路由参数的默认值,即categoryNam变量的默认值是food,而Action方法则是对应控制器中的show方法。,16,.,20.3路由,20.3.3使用路由1.设定默认的URL路由在通过ASP.NETMVC项目模板所建立的一个基本MVC网站中,在Global.asax文件中就已经设定了默认的URL路由,以便我们即刻运行所建立的MVC网站:(1)默认的URL模式:controller/action/id默认值:action=IndexId=null(2)默认的URL模式:Default.aspx默认值:controller=Homeaction=IndexId=null2.添加路由添加路由最简单的方法是使用位于命名空间System.Web.Mvc中的RouteCollectionExtension静态类,在这个类中针对路由集合RouteCollection扩展了二个方法:(1)IgnoreRoute()方法主要用于设置不需要使用路由解析的URL地址,有二个重载的方法。(2)MapRoute()方法则用于设置各种的路径,一共有6个重载的方法。,17,.,20.4构建模型,在ASP.NETMVC框架中,模型主要实现应用程序中数据访问和业务逻辑,按照规定,这些模型类均存放在Models文件夹中。我们可以使用各种各样不同的技术来实现数据访问和业务逻辑。比如MicrosoftEntityFramework、NHibernate、Subsonic或者ADO.NET类来构建的数据访问类。最为常用的是LINQtoSQL类和ADO.NETEntityDataModel。,18,.,20.5控制器,在ASP.NETMVC中,控制器有着非常重要的作用,控制器处理用户的请求,将用户请求的URL路由,分发到控制器中的相关动作方法并执行适当的业务逻辑。控制器类通常调用一个单独的视图组件来生成HTML标记以对请求做出反应。20.5.1控制器类所有控制器的基类都是Controller类,这个类提供通用的MVC处理功能。Controller类实现了IController、IActionFilter和IDisposable接口。,19,.,20.5控制器,20.5.1控制器类Controller基类负责以下处理阶段:定位适当的行为方法。获取行为方法参数的值。处理在执行行为方法过程中可能出现的所有错误。提供默认的WebFormViewFactory类以用来渲染ASP.NET页面类型(视图)。以下代码展示了一个名为HomeController的控制器类的定义:publicclassHomeController:ControllerpublicActionResultIndex()ViewDataMessage=欢迎学习ASP.NETMVC!;returnView();,20,.,20.5控制器,20.5.2ActionResult类型ActionResult是一个抽象类,因此实际返回的类型是该抽象类的子类。ActionResult的子类有如下表所示:,21,.,20.5控制器,20.5.3行为方法使用ASP.NETMVC应用程序的用户交互则围绕控制器及其中的行为方法进行组织。行为方法是在控制器中定义的。通常,行为中针对每一个用户的交互都创建一个一一对应的映射,用户的交互包括在浏览器中输入一个URL,点击一个链接,以及提交一个表单,等等。每一个这类的用户交互都会导致把一个请求发送到服务器。而请求URL中都会包括相应的信息以便MVC框架来调用一个相应的行为方法。下面这段代码定义了一个控制器,并在该控制器中定义了一个名为“Hello”行为方法:publicclassMyController:ControllerpublicActionResultHello()/控制器方法returnView(HelloWorld);,22,.,20.6视图,ASP.NETMVC框架提供一个视图引擎以生成视图。默认情况下,MVC框架使用定制的类型来生成视图,而这个类型继承自已经存在的ASP.NET页面(.aspx)、母版页(.master)和用户控件(.ascx)。一般情况下,在基于MVC的Web工程构架中,把视图全部放到Views文件夹的下面。根据MVC框架要求,视图中不应该包含任何应用程序逻辑或数据库检索代码。借助于控制器行为方法提供的与MVC视图相关的数据对象,由视图负责渲染相应的用户接口界面。,23,.,20.6视图,视图页面是一个ViewPage类,这个类继承自Page类,并实现IViewDataContainer接口。IViewDataContainer接口提供了一个ViewData属性,这个属性返回一个ViewDataDictionary对象,这个对象包含视图要显示的数据。可以使用ASP.NETWeb应用程序项目中提供的模板来创建视图。默认情况下,视图是一个由MVC框架渲染的ASP.NETWeb页面。MVC框架利用URL路由来决定调用哪个控制器行为,而控制器行为决定要渲染哪个视图。,24,.,20.7行为过滤器,行为过滤器是ASP.NETMVC中一个非常有用的扩展,允许在对MVC控制器的请求中注入拦截代码,这些代码在Controller和它的Action方法执行的前后执行,这样就可以以一种非常干净、声明的方式轻松地封装和重用功能。行为过滤器继承自ActionFilterAttribute类。可以通过行为过滤器特性来标记任何行为方法或控制器以表明行为过滤器应用于该方法或该控制器内的所有方法。,25,.,20.7行为过滤器,ASP.NETMVC2提供了四种类型的行为过滤器:1.授权(Authorize),该过滤器用来限制进入控制器或控制器行为。2.处理错误(HandleError),该过滤器用来指定一个行为,这个行为用来处理某个行为方法中抛出的异常。3.缓存输出(OutputCache),该过滤器用来为行为方法提供输出缓存。4.自定义过滤器,自定义过滤器允许开发人员自己创建行为过滤器以执行所需要的功能。比如自定义的过滤器包括日志、权限、本地化以及认证功能。,26,.,20.7行为过滤器,20.7.1Authorize过滤器当使用Authorize特性标记一个行为方法时候,该方法的进入就被限制为被认证和被授权的用户。如果一个控制器被Authorize过滤器特性所标记,则该控制器内所有行为方法的访问都具有限制性。Authorize特性让开发人员指明行为方法被限制于那些预定义的角色或用户,这样程序员就具有了允许用户查看网站内页面的最大的控制权限。如果一个未被授权的用户试图进入被Authorize特性标记的行为方法,MVC框架就会抛出401HTTP状态码。如果网站被配置为使用ASP.NET表单认证,401状态码将会把用户导航到登录页面。,27,.,20.7行为过滤器,20.7.1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB6105T 107-2019 秦岭北麓核桃低产林改造技术规程
- 信息安全管理员-高级工习题与参考答案
- DB6103T 48-2023 太白贝母种子生产技术规范
- 安全培训的困惑课件
- 医保信息化平台操作数据安全试题及答案
- -沥青桥面铺装施工方案
- 李白生平课件
- 血液透析题库及答案(医护技)
- 家具店安全教育培训课件
- 产品购销合同范本3篇
- 库房管理基础知识培训课件
- 1.2《我们都是社会的一员》教学设计 2025-2026学年统编版道德与法治八年级上册
- 2024年劳动争议调解仲裁法知识竞赛题库与答案
- 2025年上半年威海桃威铁路有限公司校招笔试题带答案
- 劳动与技术小学开学第一课
- 新诊断心房颤动的护理查房
- 学校智慧黑板采购方案 投标文件(技术方案)
- 生产策划管理办法
- 《无人机基础概论》无人机专业全套教学课件
- 滇桂黔文旅产业融合水平测度与比较
- 安全总监培训课件
评论
0/150
提交评论