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的更多相关文章

  1. 第十六章 提升用户体验 之 设计实现routes

    1. 概述 ASP.NET MVC route 用来把URL映射到方法中的action,是用户和程序之间的桥梁. 本章内容包括:定义route处理URL Pattern.应用route限制.忽略URL ...

  2. 第十七章 提升用户体验 之 使用MVC扩展功能控制程序行为

    1. 概述 ASP.NET MVC具有很好的扩展性,每一个核心功能都可以被扩展.重写 和 定制. 本章内容包括:实现MVC过滤器和controller工厂.使用 action results,view ...

  3. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  4. Gradle 1.12用户指南翻译——第二十五章. Scala 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  5. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  6. Gradle 1.12用户指南翻译——第六十五章. Maven 发布(新)

    其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...

  7. VS2017十五项新功能体验

    Visual Studio 2017十五项新功能体验 Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年.MVP ...

  8. Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..

    Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...

  9. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...

随机推荐

  1. MYSQL_与excel结合在excel中用&连接符快速创建表头_20161125

    excel &连接符快速创建表头 复制c列内容 CREATE TABLE A0001restaurant ( #用户明细表 城市 ), 区块 ), 用户ID ), 用户名称 ), 用户地址 ) ...

  2. jvm虚拟机androidy移植-编译篇

    有这个必要吗?都过时的东西了,android上的Dalvik效率不够高吗,不够逼格吗? 是的但有总东西是不是我们这些码农能决定的,领导和项目需求才是你要关心的,毕竟工作要向领导汇报,项目要去挣钱钱,但 ...

  3. Elasticsearch的前后台运行与停止(tar包方式)

    备注:在生产环境中,往往一般用后台来运行.jps查看. 1.ES的前台运行 [hadoop@djt002 elasticsearch-2.4.3]$ pwd/usr/local/elasticsear ...

  4. 【236】◀▶IEW-Unit01

    Unit 1  Fast Food I.动名词的用法 Doing(V-ing) 核心思想:词性是名词,作用是动词 1. 名词 3)主语(句首) 保护环境是我们每个人的责任. Protecting th ...

  5. [51nod1065]最小正子段和

    题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...

  6. [hiho1584]Bounce

    题意:找出图中经过一次的格子个数. 解题关键: 组合数学的思想:先找出总的经过格子的次数,然后减去2倍的经过2次的格子个数. 1.总的求法:将长延展,当延展到n倍时,能够恰好到达右边的两个端点,则总格 ...

  7. Linux运行Tomcat下的war文件

    1.查看Tomcat进程: ps -ef |grep tomcat 2.关闭Tomcat进程: kill -9 pid 3.关闭Tomcat运行: bin目录下执行 ./shutdown.sh 4. ...

  8. 关于REST的一些想法

    REST and RESTful 最近入手了REST,谈谈自己的体会. 所谓REST, 我觉得是一种网址的设计风格.过去我们用Struts 或Spring MVC 时从来没有考虑过URL的设计风格.所 ...

  9. my emacs configuration

    modified from https://github.com/flyingmachine/emacs-for-clojure ;;;; ;; Packages ;;;; ;; Define pac ...

  10. IE浏览器弹出窗口

    //弹出一个对话框 参数的顺序: url, iWidth, iHeight, vArguments function openDialog() { var url, len = arguments.l ...