ASP.NET MVC Framework

title: 原理.
content: ASP.NET MVC是遵循软件模式的Model-View-Controller来发展,其中Model指的是资料或是业务逻辑元件,View是呈现给使用者看的资讯,而Controller则是接取来自使用者的指令与资料,并将Model与View做整合的控制器,当服务器接到对ASP.NET MVC应用程序的要求时,服务器(IIS)会先使用UrlRoutingModule(ASP.NET Routing的 HTTP 模组),由它来解析是否有包含ASP.NET MVC应用程序的URL,若有,则会产生一个MvcRouteHandler物件,这个物件会装载执行的必要资讯,并且会呼叫包含在URL中的Controller的Execute方法来执行工作。  Controller物件是基于codice_1接口的规则所定义,提供针对HTTP要求做回应的一个执行工具,在ASP.NET MVC中已实作一个默认的类别 Controller,提供了必要的基础功能,另外也发展了一个 Controller 工厂,称为 Controller Factory,以codice_2接口定义,亦提供了DefaultControllerFactory,开发人员可以利用基本的类别以及利用它们来衍生自己的 Controller 或 Controller Factory 来实作自己的控制器逻辑功能。  Model物件则是为ASP.NET MVC提供资料,不过它没有基础类别,而是使用.NET Framework一般性的资料结构或是现在的ADO.NET资料物件,像是List、Dictionary、DataTable、DataReader与DataSet等等,当然也可以是自己开发的商业物件,这些资料会透过ASP.NET MVC的ModelBinder工具类别来与Controller整合,ModelBinder本身是支援泛型(Generic)的,因为各种型别的资料它都可以使用。在ASP.NET MVC中提供了一个DefaultModelBinder物件,可支援大多数的.NET Framework资料型别,以及阵列和已实作像是IList、IDictionary以及ICollection等接口的物件。  Model会在Controller执行动作时,作为一个ActionResult物件方式传回给MvcHandler物件,而这个物件即会指定要显示的View物件,像是下列程序码所示:  View物件以codice_3与codice_4等接口为主,并且以ASP.NET的各式前端接口为主要输出工具,基于MVC的View弹性化设计考量,以往在ASP.NET Web Form的程序码与HTML分离模式将不再存在,而是将程序码与HTML混合的方式设计,让开发人员可以更精确的对View进行控制,而目前 ASP.NET MVC 支援的 View 有下列几种:  每个 View 物件都会内含一个泛型的参数,用来装载要呈现的资料(即Model),然后使用类似下面的方式来呈现资料:
title: 技术.
content: 在ASP.NET MVC架构中,除了Controller、Model与View三个主要部分以外,还包含了许多技术以让这三层得以整合并交互运作。
title: Controller.
content: Controller在ASP.NET MVC应用程序中是负责中控的角色,也是来自用户端HTTP要求的处理核心,因此有许多处理与转向HTTP要求的辅助技术在Controller层次都会使用到。
title: ASP.NET 路由技术.
content: 用来过滤用户端要求的URL,并借由定义好的路由表(route table)将要求导向至正确的MVC Controller,并呼叫Controller中的Execute方法执行,而Execute方法会将HTTP动作以及实际执行的指令交给正确的函式来执行。而通常一个MVC应用程序的URL都会是类似这样的URL格式:  而MvcRouteHandler会拆解URL,找出目标的Controller,并且将ActionName以及ActionParameters传给Controller中负责的函式(以ActionName来指定)。例如下列的URL会传递给BlogController的GetList方法:
title: 动作与方法直接整合.
content: ASP.NET MVC利用了中介资料的技术,直接将方法对应到指定的 HTTP 动词 (GET/POST/PUT/DELETE/HEAD等),MvcHandler会判断要求的类别,并将它交给URL中指定的方法来处理。目前MVC Framework可用下列的方式指定(均包含在 HttpVerbs 列举型别中):
title: 将资料模型与展示层直接包装.
content: codice_10、codice_11、codice_12等展示物件都支援泛型物件,可以直接装载Model资料传递至前端输出,可简化处理Model与View之间整合的动作,只要一个参数就可以将资料传给View:
title: Model.
content: 在 ASP.NET MVC 中,Model 相对不设限,可以使用内建的资料结构以及自订的资料类别,也可以是一个商业物件,因此 Model 的弹性相当大,除了前述的资料结构外,微软新发展的一些资料存取方式也可以应用在 Model 中,像是ADO.NET Entity Framework与LINQ to SQL等技术。  另外,MVC在伺服端资料验证中,提供了codice_13类别,这个类别中有一个ModelState属性,内含了codice_14类别,开发人员可以利用这个类别来控制资料验证的结果,而View中输出验证讯息的部分会和此类别有关联,例如下列的程序:  在 ASP.NET MVC 2.0 中,新增了一个可以直接让 MVC Framework 针对资料字段进行验证控制的模型,称为 Model Validation,它融合了在.NET Framework 3.5 SP1 发表的 ASP.NET Dynamic Data Framework 中 Data Annotations (资料记号) 的特性,让开发人员可以只利用标记的方式来执行验证,或是利用自订的程序码来扩充资料记号的验证行为。
title: View.
content: 由于View是直接呈现给使用者,因此与使用者互动的部分都要由此层处理,包含资料的输出以及以用户端操作为主的回应(例如指令码)等。
title: HTML 工具类别.
content: HTML工具类别在View中是很重要的输出工具,它内建了辅助产生HTML标签的工具方法,多数的HTML语法都可以利用它来产生,包含像连结()、表单(<form>)以及表单控件等等。HTML工具是以codice_15类别为核心,并配合System.Web.Mvc.Html命名空间的方法,以延伸方法(Extension Method)的方式,让产生HTML的程序就有如呼叫方法般简单:
title: 资料验证.
content: View的HTML工具可以配合Model处理资料验证的结果,在ASP.NET中常用的ValidationSummary在这里也支援,而且MVC的架构让验证资讯的输出也更加弹性:
title: 不同类型的输出.
content: 每一个Controller中负责回应的方法,都会回传一个ActionResult物件的资讯,ActionResult是一个执行结果物件的封装体,当MvcHandler执行完指令接到ActionResult时,就会依照它的内容来输出资料。目前MVC Framework支援的ActionResult有下列几种:  透过多类型的ActionResult,开发人员可以自由决定要回传的资料的类型与格式。
title: 应用.
content: 目前微软有一个Oxite专案,是使用ASP.NET MVC Framework所开发的部落格引擎,而这个专案已经被微软的部分应用平台所采用,像是MIX Online、PDC 2009、MIX Video等官方网站都采用它来开发。另外,stackoverflow.com以及codeplex.com这两个网站也是采用ASP.NET MVC Framework。
title: 授权.
content: ASP.NET MVC Framework虽然是ASP.NET的一部分,不过它的源代码是透过Microsoft Public License (MS-PL)的授权模式公开,因此在MS-PL授权的范围内,任何人是可以去检视与修改它的源代码的。
title: ASP.NET MVC Razor Engine.
content: 微软在2010年7月2日由Scott Guthrie发表新的MVC绘制引擎 (Render Engine):Razor Engine,它已内建于 ASP.NET MVC 3.0 中发布,它具有下列功能:

Summary: ASP.NET MVC Framework是微软在ASP.NET中所添加的一组类别库,这组类别库可以使用Model-View-Controller的设计模式来开发ASP.NET的应用程序。它与现有的ASP.NET应用程序并没有冲突,所以两者是可以并行的。ASP.NET MVC Framework被包装在System.Web.Mvc.dll中,并利用ASP.NET Routing来支援动作流以及URL Rewriting的能力,让它可以更贴近Web的发展以及Web 2.0的特性。对于多数有ASP开发经验的开发人员来说看起来比较不陌生,但对于没有接触过像ASP、PHP、JSP、Perl这些Web开发工具的开发人员来说,相对的不容易入门。ASP.NET MVC 的第一个版本于2009年3月17日释出RTM版本,最新的ASP.NET MVC 5.2则是于2014年12月24日正式发行。