第十五章 提升用户体验 之 设计实现MVC controllers 和 actions
1. 概述
controllers 和 actions 是 ASP.NET MVC4中非常重要的组成部分。
controller管理用户和程序间的交互,使用action作为完成任务的方式。
如果是包含多个action的多个controller一起工作,就需要使用routes来定位具体要调用哪一个。
本章内容包括:应用验证属性和全局过滤器、实现action行为、实现action结果集、实现模型绑定。
2. 主要内容
2.1 应用验证属性和全局过滤器
可以通过给controller和action添加特定的属性来实现复杂的交互需求。属性的基类是System.Web.Mvc.FilterAttribute。
下面一组属性,用于确保进入的是预期的请求:
RequireHttpsAttribute
ValidateAntiForgeryTokenAttribute 用于防止跨站点请求伪造。
ValidateInputAttribute
AuthorizeAttribute
ChildActionOnlyAttribute:只能从Action 或 RenderAction 扩展方法中调用。比如 @Html.RenderAction(“MyDecoratedAction”)。
ActionFilterAttribute 是一个抽象类,是action过滤器的基类。四个主要的方法:
① OnActionExecuting
② OnActionExecuted
③ OnResultExecuting
④ OnResultExecuted
应用属性有三种主要的方式:
① 直接应用到action上。
② 应用到类或者controller上。
③ 全局过滤器,对系统内所有的action都有效。
2.2 实现action行为
上节讨论的过滤器属性会影响action的输出,所以也是action的一部分。
一个action上可能会应用多个过滤器属性,有两种方式可以来帮助决定这多个属性的顺序:
① “拒绝”属性中,把命中率高的排到前面。
② 根据业务的重要性排序。
2.3 实现action结果集

最常用的是 ViewResultBase,它是ViewResult和PartialViewResult的抽象基类。用于发送信息到视图引擎,生成HTML信息发送到客户端。
ContentResult 是灵活性极高的一个,返回类型从xml到pdf,支持了大部分的类型的流式传输。
FileResult 用于发送二进制文件到客户端。包含 ContentType 和 FileDownloadName两个属性。还可以支持二进制文件的管理。
JavaScriptResult 和 JsonResult 是两个面向客户端的action results。用于向客户端返回 Javascript 和 Json 格式的信息。
RedirectResult, RedirectToRouteResult, 和 EmptyResult,不直接返回信息给用户。
2.4 实现模型绑定
模型绑定是展现ASP.NET MVC4灵活性的另一个特性,平台来帮助在视图中显示模型属性信息。
① 强类型模型绑定 使得 ASP.NET MVC程序可以理解模型并且可以应用到绑定中。@Html.TextBoxFor(m => m.UserName)
② 弱类型模型绑定,如果模型没有应用属性,就不能使用强类型方式。但是还可以用弱类型方式。@Html.TextBox("model.UserName")
弱类型方式还可以把Bind属性应用到action方法的参数上。
Bind属性还可以匹配特性的前缀。前缀映射 在 UI设计和开发同步进行的情况下比较有用。
Public ActionResult Login([Bind(Prefix="login")]LoginUser user)
@Html.TextBox("login.UserName")
Public ActionResult Login(LoginUser user)
其他Bind属性:Include、Exclude
Public ActionResult Save([Bind(Exclude="Salary")]Employee emp)
③ ValueProvider对象:其他特殊场景比如要接收从第三方网站提交过来的信息,这时候强类型和弱类型绑定都无法使用。
ASP.NET MVC4 提供了四种默认的ValueProvider:
■ FormsValueProvider
■ QueryStringProvider
■ HttpFileCollectionValueProvider
■ RouteDataValueProvider
Public ActionResult Save(FormCollection formColl)
{
Employee emp = new Employee();
If (TryUpdateModel(emp, formColl.ToValueProvider())
{
UpdateModel(emp, formColl.ToValueProvider());
}
// more code here
}
3. 总结
① 过滤器属性使得开发者可以在action被调用前后来检查传入的请求信息。ASP.NET MVC使用内建属性来提供 身份验证、安全访问、防伪造支持 以及错误管理等功能,而且还可以根据需要创建自定义的action过滤器。
② Action结果集是Action方法处理http请求的结尾,通过输出流返回给调用方。
ViewResultBase是基类, ViewResult 和 PartialViewResult 返回用于生成Html信息。
FileResult 和 ContentResult 用于返回文件,一个是二进制,一个是AScii码内容。
JavaScriptResult 和 JsonResult 用来支持客户端处理,返回 Javascript代码 和 Json对象。
RedirectResult 和 RedirectToRouteResult用来跳转到其他过程,通过 URL 和 route。
③ 模型绑定用来 映射 UI的属性和模型对象的属性。有三种类型的模型绑定:强类型、弱类型 和 使用 value provider。
④ 强类型绑定是一种双向映射。HTML Helper理解模型的属性,并且可以执行客户端信息验证。
⑤ 弱类型绑定是一种单项映射,不能提供客户端验证。
⑥ 可以使用FormCollection对象的ToValueProvider方法来映射客户端的表单数据。
第十五章 提升用户体验 之 设计实现MVC controllers 和 actions的更多相关文章
- 第十六章 提升用户体验 之 设计实现routes
1. 概述 ASP.NET MVC route 用来把URL映射到方法中的action,是用户和程序之间的桥梁. 本章内容包括:定义route处理URL Pattern.应用route限制.忽略URL ...
- 第十七章 提升用户体验 之 使用MVC扩展功能控制程序行为
1. 概述 ASP.NET MVC具有很好的扩展性,每一个核心功能都可以被扩展.重写 和 定制. 本章内容包括:实现MVC过滤器和controller工厂.使用 action results,view ...
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第六十五章. Maven 发布(新)
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...
- VS2017十五项新功能体验
Visual Studio 2017十五项新功能体验 Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年.MVP ...
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...
- (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...
随机推荐
- ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)
---恢复内容开始--- Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distanc ...
- ACM学习历程——HDU4472 Count(数学递推) (12年长春区域赛)
Description Prof. Tigris is the head of an archaeological team who is currently in charge of an exca ...
- Chrome检查更新总失败?安装细则讲解
现在 Google Chrome 的稳定版都已经发布 68.0 版本了,我机上还是 54, 本想在线更新一下,结果点击菜单项中的“关于 Google Chrome”后,进入的界面提示“更新失败(错误: ...
- 推荐几个Laravel 后台管理系统
小编推荐几个Laravel 后台管理系统 由百牛信息技术bainiu.ltd整理发布于博客园 一.不容错过的Laravel后台管理扩展包 —— Voyager 简介Voyager是一个你不容错过的La ...
- Mysql常用命令行大全(三)
/**操作数据库*/ SHOW DATABASES; CREATE DATABASE db; SHOW DATABASES; DROP DATABASE db; /**操作表*/ USE db; S ...
- 系统启动挂载根文件系统时Kernel panic
转自:http://qiuye.iteye.com/blog/543595 这类问题很常见,先总体介绍一下解决思路. 能出现让人激动的的控制台,那么系统移植已经接近完成:但是不少人在最后一步出现问题. ...
- sass安装方法,绝对好用的方式
系统重做了,很多东西都重装,sass也一样,结果在安装的过程中遇到了问题,这里记录下,也给同样遇到问题的朋友们一个思路.本方法是参照http://www.w3cplus.com/sassguide/i ...
- HERO3+ Black Edition 视角 (FOV) 信息
HERO3+ Black Edition 视角 (FOV) 信息 问题 HERO3+ Black Edition 视角 (FOV) 信息是什么? 它在哪适用? HERO3+ Black 作答 所有视 ...
- [51nod] 1091 线段的重叠 贪心
X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...
- 51nod1102(单调栈/预处理)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 题意:中文题诶- 思路:单调栈/预处理 (这篇博客就不 ...