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. ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)

    ---恢复内容开始--- Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distanc ...

  2. ACM学习历程——HDU4472 Count(数学递推) (12年长春区域赛)

    Description Prof. Tigris is the head of an archaeological team who is currently in charge of an exca ...

  3. Chrome检查更新总失败?安装细则讲解

    现在 Google Chrome 的稳定版都已经发布 68.0 版本了,我机上还是 54, 本想在线更新一下,结果点击菜单项中的“关于 Google Chrome”后,进入的界面提示“更新失败(错误: ...

  4. 推荐几个Laravel 后台管理系统

    小编推荐几个Laravel 后台管理系统 由百牛信息技术bainiu.ltd整理发布于博客园 一.不容错过的Laravel后台管理扩展包 —— Voyager 简介Voyager是一个你不容错过的La ...

  5. Mysql常用命令行大全(三)

    /**操作数据库*/ SHOW DATABASES; CREATE DATABASE db; SHOW DATABASES; DROP DATABASE db; /**操作表*/ USE  db; S ...

  6. 系统启动挂载根文件系统时Kernel panic

    转自:http://qiuye.iteye.com/blog/543595 这类问题很常见,先总体介绍一下解决思路. 能出现让人激动的的控制台,那么系统移植已经接近完成:但是不少人在最后一步出现问题. ...

  7. sass安装方法,绝对好用的方式

    系统重做了,很多东西都重装,sass也一样,结果在安装的过程中遇到了问题,这里记录下,也给同样遇到问题的朋友们一个思路.本方法是参照http://www.w3cplus.com/sassguide/i ...

  8. HERO3+ Black Edition 视角 (FOV) 信息

    HERO3+ Black Edition 视角 (FOV) 信息 问题  HERO3+ Black Edition 视角 (FOV) 信息是什么? 它在哪适用? HERO3+ Black 作答 所有视 ...

  9. [51nod] 1091 线段的重叠 贪心

    X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...

  10. 51nod1102(单调栈/预处理)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 题意:中文题诶- 思路:单调栈/预处理 (这篇博客就不 ...