MVC是一种架构设计模式,主要应用于图形用户界面(GUI)应用程序。那么什么是MVC呢?MVC由三部分组成:模型、视图和控制器。
MVC概念
MVC是一种架构设计模式,主要应用于图形用户界面(GUI)应用程序。那么什么是MVC呢?MVC由三部分组成:模型、视图和控制器。
也就是模型应用的数据模型。任何应用都离不开数据,数据可以存储在数据库、磁盘文件甚至内存中。模型是这些数据的抽象。无论数据采取何种存储形式,应用程序总是可以通过Model对数据进行操作,而不管数据的存储形式如何。数据类是一种常用的模型。例如,客户管理应用程序使用数据库来存储客户数据。数据库表中有一个客户表,一般在相应的程序中建立一个数据实体类customer与之对应。这个实体类甚至是客户表的模型。
视图是应用程序的界面。用户可以通过View操作应用程序,完成与程序的交互。视图提供了一个可视化的界面来显示模型中定义的数据。用户可以通过视图对数据进行操作,并将对模型数据的操作结果返回给用户。在桌面应用程序中,视图可以是一个或多个Windows窗体。在Web应用程序中,视图由一系列网页组成。ASP.NET网站的aspx页面。
控制器定义程序的应用逻辑。用户通过视图向控制器发送操作命令,控制器根据编程的逻辑更新模型定义的数据,并通过视图向用户返回操作结果。
MVC的历史
MVC的概念最早是由美国教授Trygve Reenskaug在1979年提出的。1988年,MVC设计模式在《A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80》一书中正式提出。随着微软Windows操作系统的快速发展和普及,图形用户界面应用逐渐成为主流,MVC框架出现在很多编程语言中,方便开发者使用这种模式设计应用。这些框架大部分都是针对Web应用的。
MVC设计模式在。NET Web开发
ASP.NET使用代码隐藏技术。x,彻底结束了传统ASP程序开发的噩梦:程序逻辑和HTML界面元素混杂在一起。代码隐藏技术将。aspx文件,表示来自。vb/。cs文件的逻辑代码(控制器),这是一个MVC设计。ASP.NET 2.0又出现了CodeBeside技术,也就是an。aspx文件可以有多个。vb/。cs文件,方便了接口和逻辑代码的进一步分离。
2008年3月,微软发布了ASP.NET 3.5的MVC框架(预览2版)。这是ASP.NET真正的MVC框架。这个框架可以说是对开发者之前所熟悉的基于Web表单的应用开发方式的一次‘颠覆’。这种变化可以用“令人震惊”来形容:
1.使用URL路由技术:Web程序的URL不再指向特定的物理页面。而是某个控制器的某个方法。典型MVC架构程序的URL可能如下所示:
http://www.mysite.com/Customer/Index
使用MVC架构的程序的URL不必有文件扩展名。上述URL中的客户是控制者的名称。Index是由客户定义的方法名。
2.网络程序接口。aspx不再使用服务器端表单:
asp: form runat='server'/form
那么与服务器端表单相关的回发和页面生命周期事件也不存在。
3.页面中没有更多的视图状态。视图状态不能用于存储MVC下的程序状态信息。
4.不再提供依赖于服务器端表单的服务器控件事件,MVC下也不再需要开发者熟悉的Button_Clicked事件。
NET MVC示例
安装ASP.NET MVC Preview 2后,VS2008中会增加一个新的项目模板‘ASP.NET MVC Web应用’,如下图所示
新建该项目后,VS2008自动生成项目的文件结构如下,MVC三个组成部分各有一个文件夹来存储各自的程序文件。
前面提到的统一资源定位器路由即在Global.asax.cs中设置:复制代码代码如下:公共类全球应用程序:系统.网络。http应用{ public static void register routes(route collection routes){//注意:IIS7以下的(同移民检查员移民检查)版本需将统一资源定位器格式设置为{控制器}。要启用的mvc/{action}/{id} '
路线。添加(新路线(' {控制器})。mvc/{action}/{id} ',new MvcRouteHandler()){ Defaults=new RouteValueDictionary(new { action=' Index ',id='' }),});//设置统一资源定位器路由格式
路线. Add(new Route('Default.aspx ',new MvcRouteHandler()){ Defaults=new RouteValueDictionary(new { controller=' Customer ',action='Index ',id=' ' });//设置默认统一资源定位器指向客户控制器的索引方法}
protected void Application _ Start(object sender,EventArgs e){注册路由(路由表.路线);}}【代码1】:Global.asax.cs
下面来实现顾客的型号、控制器及查看:
型号:在项目中的模型文件夹下,新建一个Linq to SQL类,将北风数据库中的顾客表拖拽到其设计视图中。这样就完成了顾客对应的型号。如图四
控制器:在项目中的控制器文件夹下,新建一个手动音量调节控制器类,命名为CustomerContoller.cs。在此类中添加一个公有方法索引,此方法及为在Global.asax.cs中设置好的默认统一资源定位器所映射的方法。
复制代码代码如下:公共类客户控制器:控制器{ public void Index(string id){ north wind .模特。北风数据背景DC=新北风.模特。NorthwindDataContext();伊利斯特诺斯温德。模型。客户客户=dc .顾客。拿(10)。to list();//取数据库中的10个顾客记录RenderView('索引,客户);//返回索引视图}}
【代码2】:CustomerController.cs
查看:上面索引方法的代码表示客户控制器的索引方法执行后,需要返回一个名称为索引的查看,以便将数据呈现给用户。下面来添加这个索引视图:在项目的视角文件中,新建一个子文件夹顾客。与客户控制器有关的视角将保存在此文件夹下。新建一个手动音量调节视图类'并命名为Index.aspx。在前面的RenderView('索引,客户)方法中,客户参数是控制器传递给视角所需的数据,该参数的类型为IListNorthwind .模特。顾客。为了在视角中方便使用此强类型的数据,View.aspx.cs使用了如下代码:注意粗体部分
复制代码代码如下:公共分部类索引:ViewPageIListNorthwind .模特。客户{}
【代码3】:Index.aspx.cs
View.aspx代码如下:视图数据这一成员变量的类型及为上面提到的伊利斯特诺斯温德。模特。顾客类型。
复制代码代码如下:% @ Page Language=' c# ' AutoEventWireup=' true ' code behind=' edit。aspx。cs ' Inherits='北风.观点。Customer.Edit' %!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www。w3。org/TR/XHTML 1/DTD/XHTML 1-过渡。DTD ' html xmlns=' http://www。w3。org/1999/XHTML ' head runat=' server ' Title/Title/head body div表trtdEdit/TD TD TD客户ID/TD TD公司名称/TD TD联系人姓名/TD TD TD联系人头衔/TD/TR % foreach视图数据中的客户客户){ % tr TDA href='客户。MVC/Edit/%=客户' CustomerID % '编辑/a/td!—网址指向客户控制器的编辑方法- td/td td %=客户CustomerID %/td td %=客户。公司名称%/td td %=客户ContactName %/td td%=客户100 . contact title %/TD
/tr % } %/表格/分区/正文/html
【代码4】:Index.aspx
下面来实现客户控制器的编辑方法。在客户控制器。铯中添加如下代码:
复制代码代码如下:公共void编辑(字符串id){北风.模特。北风数据背景DC=新北风.模特。NorthwindDataContext();客户c=直流.顾客。单身(cus=cus .CustomerID==id);//从数据库中取出参数身份证明(识别)所对应的的一个顾客记录
RenderView('Edit ',c);//返回编辑视图
【代码5】:CustomerController.cs中的编辑方法
相应的在项目中的视图/客户/文件夹下,添加编辑视图编辑. aspx:
复制代码代码如下:公共分部类编辑:查看页面Northwind .模特。客户{}
【代码6】:Edit.aspx.cs
复制代码代码如下:% @ Page Language=' c# ' AutoEventWireup=' true ' code behind=' edit。aspx。cs ' Inherits='北风.观点。Customer.Edit' %!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www。w3。org/TR/XHTML 1/DTD/XHTML 1-过渡。DTD ' html xmlns=' http://www。w3。org/1999/XHTML ' head runat=' server ' title/title/head body!—下面的超文本标记语言表单将用户的输入提交到客户控制器的更新方法-%使用(Html .形成北风。控制器。客户控制器(cc=cc .更新(视图数据. CustomerID))){ % div客户ID: %=ViewData .CustomerID % br /公司Nmae: %=Html .文本框('客户。'公司名称,查看数据公司名称)% br /联系人姓名:%=Html .文本框('客户。'联系人姓名,查看数据ContactName) %br /联系人标题:%=Html .文本框('客户' ContactTitle ',查看数据ContactTitle) % /div %=Html .提交按钮('保存')% % } %/body/html
【代码7】:Edit.aspx
代码七中使用了手动音量调节框架中的一个帮助类Html。此类可以生产视角中常用的界面元素,例如超文本标记语言表单,文本输入框等。
下面来实现客户控制员的更新方法:
复制代码代码如下:公共void更新(字符串id) {北风.模特。NorthwindDataContext DC=new NorthwindDataContext();//从数据库中取出参数身份证明(识别)所对应的的一个顾客记录:客户cust=dc .顾客。single(c=c . CustomerID==id);//将编辑视图中的用户的更改赋值到顾客对象:BindingHelperExtensions .更新自(客户,请求。形式);华盛顿提交更改();RedirectToAction(' Index ');//跳转到索引视图}
【代码8】:CustomerController.cs中的更新方法
上面的代码通过ASP。净MVC框架实现了顾客的列表、编辑及更新功能,可以看出手动音量调节将应用程序的模型、视图及控制器三部分'优雅的'分离,真正实现了高内聚、低耦合的灵活架构,大大降低了程序的复杂性,提高了可扩展性及可重用性。这一框架对网开发带来的影响不仅是是技术上的变化,更是网程序设计思想的变化-网络程序不再是一些列功能页面的集合,而是又控制器控制的功能单元的集合,Web程序更像是一组通过其统一资源定位器对外开放的美国石油学会。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。