`

初识ASP.NET MVC

阅读更多

.NET 4.0 framework支持MVC3.0   用VS2008的只能使用MVC 2.0

VS2008安装MVC2.0 http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html

需要说明的是ASP.NET MVC只是给开发者提供了开发web应用程序的一种选择,而绝不是替代传统ASP.NET WebForms技术,这两种技术在不同的应用场景中,具有不同的优缺点,开发者需要根据自己的实际情况,选择对应的技术,甚至在同一个项目中混合使用这两种技术。

   从上图可以看出,ASP.NET MVC与ASP.NET WebForm是建立在ASP.NET基础上的两种平行的技术,是微软今后同时发展的两种Web开发技术。

   既然这样为什么要使用ASP.NET MVC呢?

   主要是由于WebForm开发难以测试,虽然它的使用非常方便,然而微软构建了一个非常复杂的引擎,从而给页面的执行过程带来了许多负面效应,开发者很难了解这背后的HTML是如何运作的。同时如果没有合理控制ViewState的话,很容易得到一个包含大量ViewState的页面,使得该页面的尺寸远远超过所需的内容,最终页面打开的速度非常缓慢,随着web应用越来越复杂化,不容易测试也越来越成为实际应用开发中的一个棘手问题。

   微软2007.12发布了ASP.NET 3.5 MVC预览版,2009.3.18发布了ASP.NET 3.5 MVC 1.0版本。MVC避免了WebForm所带来的复杂性,没有数据回传,没有ViewState,开发者可以完全掌握页面呈现的全过程,使用模型、视图、控制器将web应用划分到不同组建中,有利于开发人员与设计人员的分工,提高了程序的可维护性和扩展性,特别是有利于web应用程序的测试,可以比较容易地实施测试驱动开发。其他特点包括:易于单元测试、支持WebForm中的有关特性(如视图模版中支持各种当前的aspx页面,用户控件ascx,母板页master,嵌套母板页,内联表达式,数据绑定,本地化,成员、角色管理、数据缓存等)

基本概念

   模型----前面学的LINQ to SQL类就是一个模型,类似的还有ADO.NET  Entity Data Model(ADO.NET实体数据模型),它们都是模型,它们实现的是传统三层架构的数据访问层和业务逻辑层的任务。但有时一些应用程序并不使用这些ORM框架,所以对于这些应用程序而言,模型是概念上的,此时被读取的数据就是模型。模型组件一般被存放在Models文件夹中。

   视图----视图就是用于显示模型中数据的用户界面,一般来说视图就是HTML页面。视图组建一般被存放在Views文件夹中。

   控制器----用于处理用户的输入或交互命令,以便改变模型的状态,选择适当的视图来显示对应模型的数据。控制器组件一般被存放在Controllers文件夹。

当用户在浏览器中输入浏览地址,获得页面的反馈结果,一般需要经过以下5个结果:

1.用户输入浏览地址,发出页面请求,实际上是向控制器发出相关的命令。

2.控制器接收到用户请求命令后,向模型请求获得相关的数据。

3.模型将对应的数据返回给控制器。

4.控制器将有关的数据发送到指定的视图。

5.指定的视图呈现被指定的数据。

在传统的WebForm中,URL通常被映射为保存在磁盘上的一个文件,而在MVC中,URL不再被映射为一个文件,URL首先被映射到一个控制器中,该控制器处理用户的输入,选择适当的模型,获得相关数据,然后调用视图组件显示指定的数据,并返回到用户界面。

约定的目录结构

Models、Views、Controllers、App_Data、Scripts、Content(可用来存放静态文件如样式文件、图片等)、Shares(视图组件的公用部分,该目录不属于单个控制器,而属于所有控制器,可以存放母板页、错误页面、用户控件等)

Controllers里面就是控制器组件,都是些****Controller.cs的类文件,它们里的****Controller类必须实现Icontroller接口或继承抽象类Controller类。而对于每一个****Controller.cs在Views里面必须有一个名为****的文件夹与之对应。也就是说每一个****目录都属于相应的****Controller控制器。如下图的AccountController--Account、HomeController--Home

我们来看看HomeController里写了些什么

   也许你已经发现了在Views里的Home目录里有Index.aspx和About.aspx恰巧与HomeController里的这两个方法名相同,没错,****Controller控制器里返回值类型是ActionResult的方法名对应的就是该控制器所管的Views下的****目录里的aspx页面。

   这些方法被称为动作方法,它们处理用户的请求,执行其中相关的代码,例如检索或更新数据库中的数据,然后选择相关的视图,将内容输出到浏览器中。这些方法的返回类型是ActionResult,它是一个抽象类,因此实际返回的是该抽象类的子类,ActionResult的子类见下图:

上图中return View();语句中的View()方法是一个控制器方法,返回的是一个ViewResult实例化对象,将指定的内容输出到浏览器中。        

其他控制器方法与其对应的返回对象如下图:

其他必要知识

MVC使用了Global.asax,并在该文件的Application_Start()方法中设置了URL路由,以及相关路由逻辑。

MVC还通过配置文件注册了专门的HTTP模块,在httpModules节中,注册了UrlRoutingModule类,用于解析URL的路由。

执行过程

用户请求的URL地址首先被传递到UrlRoutingModule模块,该模块解析URL地址,然后选择相关的URL路由,并得到对应的IHttpContext对象来处理该URL路由。在默认情况下,该IHttpContext对象就是MvcHandler对象。通过MvcHandler对象选择相关的控制器来处理用户的请求。

因此UrlRoutingModule模块和MvcHandler对象是MVC网站的入口点,它们主要实现1.选择适当控制器 2.获得指定控制器的一个实例化对象 3.调用指定控制器中的相关方法。

下图说明了MVC页面请求的执行过程:

  传统WebForm中每一个被请求页面都对应着一个文件,这些页面类都实现了IHttpHandler接口,每当一个页面被请求时,就会调用该类的ProcessRequest()方法,之后返回指定内容到浏览器中。

  MVC中每一个被请求页面都被映射到相应的控制器中的相应方法,控制器负责将指定内容返回到浏览器中。而页面到控制器的映射是通过路径表(Route Table)实现的,每一个MVC程序都有一个路径表,路径表是通过RouteTable。Routes属性表示的。我们来看看它的设置,在Global.asax文件里:

路径表中添加了1个路由对象,该路由对象实现URL到MvcRouteHandler的映射,将具有{controller}/{Action}/{id}模式的URL映射到MvcRouteHandler。

请求一个MVC页面时,由UrlRoutingModule模块解析该URL,并获得相关的RouteData对象。然后创建HttpHandler的实例化对象MvcHandler,执行MvcHandler的ProcessRequest()方法从而创建一个控制器的实例化对象,然后调用该控制器对象的Execute()方法,在该方法内部通过反射原理实现对其指定的其他方法的调用,在调用的方法中会执行View()方法,从而将指定页面的内容返回到浏览器中。

分享到:
评论

相关推荐

    初识ASP.NET Mvc5+EF7的奇妙之旅

    【初识ASP.NET Mvc5+EF7的奇妙之旅】 ASP.NET MVC5 和 Entity Framework 7 (EF7) 是 .NET 开发中的两个重要组件,它们在 .NET5 框架下进行了重大更新,带来了更现代、跨平台的开发体验。这次奇妙之旅将带你深入理解...

    Professional ASP.NET MVC 1.0

    #### 一、NerdDinner:初识ASP.NET MVC框架 - **NerdDinner项目简介**:本书通过一个名为NerdDinner的实际项目来介绍ASP.NET MVC框架的基本用法。该项目旨在帮助读者快速上手,并理解MVC模式在Web开发中的应用。 - *...

    ASP.NET MVC PPT.rar

    ASP.NET MVC是一个强大的框架,用于构建可维护性和可测试性高的Web应用程序。这个PPT系列涵盖了从基础到高级的ASP.NET MVC技术,旨在帮助开发者掌握企业级应用开发的关键概念。 第1章:MVC开发前奏 在这一章中,...

    ASP.NET 4.0 In Practice

    #### 第8章:初识ASP.NET MVC MVC(Model-View-Controller)模式是一种流行的软件架构模式,用于构建清晰、可维护的Web应用程序。本章介绍了ASP.NET MVC框架的核心概念和工作流程,包括如何创建MVC项目、如何组织...

    初识ASP.NET AJAX

    提供的"第1章:初识ASP.NET AJAX.pdf"资源是一个很好的起点,涵盖了基础概念和实践应用,适合初学者入门。 总的来说,ASP.NET AJAX为.NET开发者提供了一套强大的工具,用于构建高性能、用户友好的Web应用程序。掌握...

    初识asp.net 仅供初学者参考

    本课件“初识ASP.NET”是针对初学者设计的,旨在帮助他们快速入门并掌握ASP.NET的基础知识。 1. **ASP.NET概述** ASP.NET是.NET Framework的一部分,它提供了多种Web开发模型,如Web Forms、MVC(Model-View-...

    ASP.NET-MVC:ASP.NET MVC

    关于ASP.NET MVC模式 MVCDEMO项目 1.1 初识MVC--TestController.cs 1.2 简单的增删改查--PersonController.cs 1.3 关于layout--LayoutTestController.cs 2020年4月20日 23:08:40 Update:添加其他的一些Demo 02...

    C# 与ASP.NET初识教程清淅版 PDF

    【C# 与ASP.NET初识教程清淅版 PDF】是一个专门为初学者设计的教程,旨在帮助学习者深入了解和掌握C#编程语言以及ASP.NET Web应用程序开发基础。本教程覆盖了从基本概念到实际应用的关键知识点,对于想要踏入IT行业...

    10天学会ASP.NET

    第一天:初识ASP.NET 在学习之初,你需要理解ASP.NET的基本概念,包括它的工作原理、架构和主要组成部分,如页生命周期、服务器控件和状态管理。ASP.NET页面由HTML、服务器控件和代码组成,通过编译模型运行,提高了...

    Beginning ASP.NET Databases using C#

    《初识ASP.NET数据库开发——使用C#》 在当今的Web开发领域,ASP.NET以其高效、稳定和强大的功能成为了许多开发者的首选平台。而利用C#语言与ASP.NET进行数据库交互,则是构建动态网站和应用程序的基础。本教程将...

    21天ASP.NET电子教案(PPT)

    总的来说,"21天ASP.NET电子教案(PPT)"将引导您从初识ASP.NET到熟练掌握其关键技术和最佳实践,无论您是初学者还是有经验的开发者,都能从中获益。通过21天的学习,您将具备构建专业级Web应用程序的能力。

    Beginning ASP.NET 3.5 sample code

    《初识ASP.NET 3.5》示例代码 ASP.NET是微软开发的一款用于构建Web应用程序的框架,自2002年首次发布以来,它已经经历了多次版本更新,其中包括了ASP.NET 3.5。这是一份关于《初识ASP.NET 3.5》一书的配套示例代码...

    ASP.NET Ajax开发

    ### 第1章:初识ASP.NET Ajax 1. **ASP.NET AJAX扩展**:ASP.NET AJAX是.NET Framework的一部分,它包括一组服务器端控件和客户端库,这些组件可以轻松地与ASP.NET Web Forms或MVC应用程序集成。 2. **UpdatePanel...

    Beginning Ajax with ASP.NET

    《初识Ajax与ASP.NET》是一本专注于介绍如何在ASP.NET框架下利用Ajax技术进行高效网页开发的书籍。Ajax(Asynchronous JavaScript and XML)技术以其无刷新、异步交互的特性,极大地提升了用户体验,而ASP.NET是微软...

    ASP.NET期末作业课程设计—流浪书店系统源码+文档.zip

    这部分会涉及到ASP.NET MVC或者ASP.NET Core的Razor视图,以及Bootstrap、jQuery等前端库的使用,用于实现响应式布局和交互功能。 3. **版本控制** - ".git"文件夹表明项目使用了Git进行版本控制,这是一个重要的...

    Infragistics NetAdvantage for ASP.NET 2009 Vol 1 CLR 3.5 Source(2009年4月6日的版本)

    《Infragistics NetAdvantage for ASP.NET 2009 Vol 1 CLR 3.5 Source:深入探索专业UI控件库的源代码》 Infragistics NetAdvantage 是一个由Infragistics公司开发的全面的.NET UI控件集合,专门针对ASP.NET平台。...

    J2EE应用开发_初识J2EE

    此外,ASP.NET还提供了一种名为MVC(Model-View-Controller)的架构模式,这使得它在现代Web开发领域中非常受欢迎。 #### JSP技术构架 JSP技术的核心构架主要包括以下几个方面: 1. **脚本元素**:这些是在JSP...

Global site tag (gtag.js) - Google Analytics