zoukankan      html  css  js  c++  java
  • 第十五章 提升用户体验 之 设计实现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方法来映射客户端的表单数据。

  • 相关阅读:
    跨公司销售利润中心替代
    [WCF学习笔记] 我的WCF之旅(1):创建一个简单的WCF程序
    linux操作常用命令
    java lambda表达式
    关于lock和synchronized的选择
    ssh免密登陆(简单快捷)
    su和sudo的区别
    Linux常用查找命令
    vmware完整克隆(linux)
    springboot2.0拦截器和webconfigure配置
  • 原文地址:https://www.cnblogs.com/stone_lv/p/5177866.html
Copyright © 2011-2022 走看看