准备工作
安装VS2010或更高版本
安装数据库2008或更高版本
视个人系统不同配置IIS本地服务
数据库和VS下载地址
本节目标
通过本节案例对MVC模式有初步认识并能建立小型MVC应用程序
MVC简介
对MVC的认识:
构建web应用程序的一种架构
MVC模式:
M (模型—model ) V(视图--View) C(控制器Controller)
普通架构:
System.web.ui:web form层,由服务器控件和viewState组成
System.web:管道程序,提供基本的web堆栈,包括组件模块,处理程序和http堆栈
三层架构:
表示层
从用户端搜集数据
将数据发送到数据服务层处理
从业务服务层接受处理结果
展现给用户
业务逻辑层
从表示层接受数据
与数据层交互执行已设计的业务
操作(业务逻辑,系统服务等)
将处理结果发送至表示层
数据存取层
数据存储
数据获取
数据维护
数据完整性
MVC与三层架构
Asp.net web API
MVC在web框架中的应用
具备知识
控制器
一: 什么是控制器且在模式交互中的角色?:
控制器其实就是一种类,用于根据用户输入的请求处理并执行响应的业务逻辑代码。并调用单独的视图组件来生成的html标记以对请求做出反应
注意的是:控制器存在的位置,承担的角色,起到什么作用
控制器的响应过程
二:控制器继承自谁?
ControllerBase
ControllerBase实现了IController接口的Execute方法,在路由器搜索到相应的控制器后,会调用Execute方法进入控制器的处理。
ControllerBase的属性
序号 |
属性 |
描述 |
1 |
ControllerContext |
获取或设置控制器的上下文 |
2 |
TempDate |
获取或设置临时的数据字典 |
3 |
ValidateRequset |
获取或设置一个值,并指示是否为此请求启用请求验证 |
4 |
ValueProvider |
获取或设置控制器的值 |
5 |
ViewData |
获取或设置视图数据的字典 |
6 |
ViewBag |
获取动态视图的数据字典 |
三:ControllerBase类负责什么处理
定位适当的行为方法
获取行为方法参数的值
处理在执行行为方法过程中可能出现的所有错误
提供默认的WebFormViewFactory类以用来渲染asP.net页面类型Controller类提供的属性
ActionInvoker |
获取应用程序的操作调用顺序 |
Binders |
获取或设置联编程序 |
ControllerContext |
获取或设置控制器上下文 |
HttpContext |
获取有关单个HTTP请求的http特定信息 |
ModelState |
获取包含模型状态和模型绑定验证状态的模型状态字典对象 |
Request |
为当前Http请求获取httpRequestBase对象 |
Respose |
为当前Http响应获取HttpResponseBase对象 |
RotueData |
为当前请求获取路由数据 |
server |
获取提供Web请求处理期间使用方法的HttpServerUtilityBase对象 |
Session |
为当前Http请求获取HttpSessionStateBase对象 |
TempData |
获取或设置临时数据的字典 |
TempDataProvider |
获取用于下一个请求存储数据的临时数据提供程序对象 |
url |
使用路由获取用于生成Url的url帮助器对象 |
User |
为当前Http请求获取用户安全信息 |
ValidateRequest |
获取或设置一个值,该值知识是否为次请求启用请求验证 |
ValidateProvider |
获取或设置控制器的值 |
ViewData |
获取或设置视图数据的字典 |
测试Request,Respose,Server和Session对象
Step 1创建空的MVC项目
添加名为Home的控制器
Step 2
在Index控制器上右键 选择添加视图命令,并取消其他选项添加Index视图
如图
Step 3
运行程序
Controller类提供的方法
① Content方法 用来创建结果对象
序号 |
方法 |
描述 |
1 |
Content(string) |
使用字符串创建内容结果对象 |
2 |
Content(string,string) |
使用字符串和内容类型创建结果对象 |
3 |
Content(string,string,Encoding) |
使用字符串,内容类型和内容编码创建内容对象 |
② File方法 主要对文件进行操作
序号 |
方法 |
说明 |
1 |
File(Byte(),string) |
使用文件内容和文件类型创建FileContentResult对象 |
2 |
File(string,string) |
使用文件名和内容类型创建FilePathResult对象 |
3 |
File(Byte(),string,string) |
使用文件内容,内容类型和目标文件创建FileContentResult对象 |
4 |
File(stream,string,string) |
使用Stream对象,内容类型和目标文件创建FileSteamResult对象 |
5 |
File(string,string,string) |
使用文件名,内容类型和文件下载名创建FilePathResult对象 |
③ Json方法
序号 |
方法 |
说明 |
1 |
Json(object) |
创建将指定对象序列化为JavaScript对象表示法(JSON)的jsonResult对象 |
2 |
Json(object,string) |
创建将指定序列化为Javascript对想表示法(JSON)格式的jsonResult对象 |
3 |
Json(object,jsonRequstBehavior) |
创建jsonResul对象,该对象使用指定的json请求将指定的对象序列化为javascript对象表示法(json)格式 |
4 |
Json(object,string,Encoding) |
创建将指定对象序列化为javascript对象表示法(json)格式的jsonResult对象 |
5 |
Json(object,string,jsonRequstBehavior) |
创建jsonResult对象,该对象使用指定内容类型和json请求行为将指定对象序列化为javascript对象表示法json格式 |
6 |
Json(object,string,Encoding,jsonRequestBehavior) |
创建jsonResult对象,该对象使用内容类型,内容编码和json请求行为将创建指定对象序列化为javascript对象表示法(json)格式 |
④ 重定向方法
序号 |
方法 |
说明 |
1 |
Redirect |
创建重定向到指定的URL的RedirctResult对象 |
2 |
RedirectToAction(string) |
使用操作名称重定向到指定的操作 |
3 |
RedirectToAction(string,object) |
使用操作名称和路由值重定向到指定的操作 |
4 |
RedirectToAction(string,string) |
使用操作名称和控制器名称重定向到指定的操作 |
5 |
RedirectToAction(string,RouteValueDictionary) |
使用操作名称和路由字典重定向到指定的操作 |
6 |
RedirectToAction(string,string,object) |
使用操作名称和路由值重定向到指定的操作 |
7 |
RedirectToAction(string,string,RouteValueDictionary) |
使用操作名称,控制器名称和路由字典重定向到指定的操作 |
8 |
RedirectToRoute(object) |
使用指定的路由值重定向到指定的路由 |
9 |
RedirectToRoute(string) |
使用路由名称重定向到指定的路由 |
10 |
RedirectToRoute(RouteValueDictionary) |
使用路由字典重定向到指定的路由 |
11 |
RedirectToRoute(string,object) |
使用路由名称和路由值重定向到指定的路由 |
12 |
RedirectToRoute(String,RouteValueDictionary) |
使用路由名称和路由字典重定向到指定的路由 |
⑤ View方法 用来创建一个将视图呈现给响应的viewResult对象
序号 |
方法 |
说明 |
1 |
View |
创建将视图呈现给响应的ViewResult对象 |
2 |
View(object) |
使用视图模型创建将视图呈现给响应的ViewResult对象 |
3 |
View(string) |
使用视图名称创建呈现视图的ViewResult对象 |
4 |
View(Iview) |
创建呈现指定iview对象的viewResult对象 |
5 |
View(string,object) |
使用视图名称和模型创建将视图呈现给响应的viewResult对象 |
6 |
View(string,string) |
使用视图名称和母板页名称创建将视图呈现给响应的 |
7 |
View(IView,Object) |
创建呈现指定的IView对象的ViewResult对象 |
8 |
View(string,string,object) |
使用视图名称,母板页名称和模型创建呈现视图的ViewResult对象 |
三:创建控制器
操作: 在Controller文件夹上右键-添加控制器,创建控制器时要以Controller为前缀。
创建控制器会看到的模版
四: 创建新控制器用到的模版
1:EmptyController
创建一个空的控制器文件
2:Controller with read/write action and views,using Entity Framwork
此模版可以快速的创建可用的数据输入用户界面,生成可处理的各种常见要求和方案代码
数据访问:生成的代码中将读写数据库中的实体
验证: 生成的代码将使用asp.net MVC 模型绑定和元数据功能,以便根据在模型类上声明的规则来验证窗体提交
一对多关系:如果模型类之间存在一对多外键关系,则生成的代码将用于选择相关实体的下拉列
3:Controller with empty write/ read action
使用此模版创建的控制器包含必须的操作方法,但却不包含次方法的具体实现代码
4:Empty API Controller
生成继承于ApiController控制器文件
5:Api Controller with empty read/write actions
使用此模版将生成继承于apiController控制器文件,其中包括所有必须的操作方法,但这些方法不包含实现代码
五: ViewDate
什么是ViewDate,可以实现什么功能?
答:viewDate是一种字典对象,可以将任何数据放在里面并且用“键/值”对语法进行存取调用
事例:
在控制器中添加新的方法
添加视图
视图引擎 选择
<%=html.dropdownList(“list”)%>
六:ViewBage
|
ViewDate |
ViewBag |
类型 |
字典集合 |
Dynamic |
出现时间 |
Asp.net MVC1 |
Asp.netMVC3 |
基于框架 |
.net3.5 |
.net 4.0 |
存取速度 |
快 |
慢 |
类型转换 |
需要转换合适的类型 |
不需要类型转换 |
代码可读性 |
不好,有类型转换代码 |
好 |
动态类型的对象,可以动态的对其进行存取,增加任何数量的额外字段而不需要强类型的检测
七:TempData
什么是Tempdate?与前两个有何区别?如果使用TempDate
前两个实现了行为方法与视图间的传递,而TempDate实现了行为与方法间的数据传递并随着下一个Action的到来保存在TempDate里的数据也会随着消失
测试并验证TempData
Step 1 创建空的MVC应用程序
Step 2 添加Home控制器并输入以下代码
Step 3
在About控制器上右键添加视图,视图引擎选择aspx打开About.aspx文件并输入以下代码
Step 4运行并查看结果
八:行为方法
Asp.net的用户与系统的交互是围绕着页面单击事件,并伴随着提交的表单数据请求并响应系统逻辑代码的功能,实现用户与系统的交互,而MVC模式则是采用控制器和其中的响应方法来获得请求并响应逻辑代码功能。
当用户在游览器输入URL时MVC应用程序使用定义于Global.asax文件中的路由规则来分析该路径并决定此路径指向控制器的路径。然后该控制器定位适当的行为方法来处理此请求,根据具体的业务需求,控制器中可以定义一个或多个行为方法
注意:MVC框架认为所有的Public方法都是行为方法,如果此方法不想被认为是行为方法,则把public 改为NonActionAttribute属性
例如:
Contoso.co/MyWebSite/Products/Categories
和www. Contoso.co/MyWebSite/Products?id=1
九 行为方法参数
回顾MVC中的行为方法,MVC中的行为方法是指利用控制器和其中的响应方法来依据请求并执行响应的逻辑代码。而行为方法参数就是从请求的数据集合中的表单数据,查询字符串或者cookie值的名字/值。 如果参数的类型是引用类型或者nullable值类或者此参数值不能被正确解析的话,那么将把null作为参数传入到行为方法中去执行响应的逻辑代码,否则将会抛出一个异常。Controller基类中暴露出一组request对象和response对象用于接收参数值。
Request |
|
Response |
http://www.cnblogs.com/cltsq/archive/2011/03/02/1968573.html |
十 自动映射行为方法参数
Mvc模式可以自动把的URL 请求中的参数值映射为行为方法的参数值,默认情况下,如果行为方法中包含参数,MVC框架将会分析传入的请求数据并决定该请求是否有相同名字的HTTP请求值,如果有则会被自动的传递给该行为方法。
默认的映射规则
/controller/action/id
验证 行为方法参数
Step 1 新建空的MVC应用程序 并新建Index控制器
Step 2输入以下代码
Step 3 在index方法上右键->新建视图并取消其他选项且视图引擎选择Aspx
Step 4 打开index.aspx文件并输入以下代码
Step 5运行并查看结果
十一 返回类型
行为方法可以没有返回值、可以返回视图、字符串、整型、布尔类型。这些返回类型都是继承自抽象类ActionResult,ActionResult是所有行为结果的基础类
返回类型 |
帮助器方法 |
说明 |
ViewResult |
View |
将视图呈现为网页 |
PartialViewResult |
PartialView |
呈现部分视图
|
RedirctResult |
Redirect |
使用其URl重定向到另一个操作方法 |
RedirctToRouteResult |
RedirectToAction/RedirectToRoute |
重定向到另一个操作方法 |
ContentResult |
Content |
返回用户定义的内容类型 |
JsonResult |
Json |
返回序列化的Json对象 |
JavaScriptResult |
JavaScript |
返回可在客户端上执行的脚本 |
FileResult |
File |
返回要写入响应的二进制输出 |
EmptyResult |
无 |
表示在操作方法必须返回null结果的情况下所使用的返回值 |
ViewResult:
调用Iview实例的FindView方法并且返回Iview的实例,随后ViewResul调用Iview实例的Render方法,Render方法将承担响应输出的工作
将把制定的视图数据(即动作方法准备显示在视图中的数据)融入到模版中
PartialViewResult
该结果的工作方式与ViewResult完全相同,用来呈现局部视图
RedirctResult
使用RedirectResult调用HttpResponse.Redirect方法将结果重新指向URL的HTTP
RedirectToRouteResult
调用路由选择的API来确定并选择执行重定向的URL
ContentResult
通过Content属性将指定的内容写入到响应当中,不仅如此,该类也支持通过ContentEncoding属性设置指定的内容编码以及通过ContentType设置内容类型
遗留:异步控制器
行为过滤器