• 模型绑定与验证笔记


    模型绑定

    1.1模型绑定:以HTTP请求方式发送的数据来创建.NET对象的过程。每当定义具有参数的动作方法时,一直是在依赖着这种模型绑定过程

      当导航到/Home/Index/1时,该URL的最后一个片段会被付给id路由变量,它指定了用户感兴趣的对象。

    默认的动作调用器,ControllerActionInvoker,要依靠模型绑定器来生成调用动作所需要的数据对象。模型绑定器由IModelBinder定义。

    namespace System.Web.Mvc{
    
        // 摘要:
    
        //     定义模型联编程序所需的方法。
    
        public interface IModelBinder{
    
            // 摘要:
    
            //     使用指定的控制器上下文和绑定上下文将模型绑定到一个值。
    
            // 参数:
    
            //   controllerContext:
    
            //     控制器上下文。
    
            //   bindingContext:
    
            //     绑定上下文。
    
            // 返回结果:
    
            //     绑定值。
    
            object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext);
    
        }
    
    }
    View Code

    备注模型绑定过程是通过模型绑定器来实现的,其目的是用请求中所包含的数据创建对象

    模型绑定的步骤:

    检测目标对象的名称和类型

    通过对象名称查找数据源,并找到可用数据

    根据对象类型将找到的数据值转换成目标类型

    通过对象名称、对象类型、和这种经过处理的数据来构建目标对象

    将构建好的对象送给动作调用器,并由动作调用器将对象注入到目标动作方法中

    1.3默认模型绑定器

    DefaultModelBinder类查找参数数据的顺序

    描述

    Request.Form

    有用户在HTMLform元素中提供

    RouteData.Values

    用应用程序路由获得的值

    Request.QueryString

    包含在请求URL中的查询字符串部分的数据

    Request.Files

    请求中上传的文件

    只要找到一个值,搜索便停止。

    绑定简单类型

    当处理简单参数类型时,DefaultModelBinder会尝试使用System.ComponentModel.TypeDescriptor类,将已经从请求数据获得的字符串值转换成参数类型;也称基元类型。

    绑定符合类型

    当动作方法参数是复合类型时,DefaultModelBinder类将用反射来获取public属性集,然后依次逐一进行绑定。

    public class HomeController : Controller{
    
            public ActionResult CreatePerson(){
    
                return View(new Person());
    
            }
    
            [HttpPost]
    
            public ActionResult CreatePerson(Person p) {
    
                return View("Index", p);
    
            }
    
    }

    首先不带参数的CreatePerson重载创建了一个新的Person对象,并将其传递给View(),渲染Views/Home/Createperson.cshtml视图,用于展示新创建Person对象页。

    在表单提交给CreatePerson时,形成了一种不同的模型绑定情况。默认模型绑定器发现,动作方法需要一个Person对象,于是会一次处理每个属性。对于简单类型,绑定器从请求中找到一个值;对于复合类型该过程会针对新类型重复执行,通过反射获取该类型的public属性集,而绑定器也会视图找出所有属性的值。

    模型验证

    是确保用户所接收的数据适合于绑定到模型,并且在不合适时,给用户提供有用的信息,以帮助修正问题的过程。

    ModelState.AddModelError():指定由问题的属性和一条应该显示给用户的消息

    ModelState.IsValidField():检查模型绑定器是否能够对一个属性赋值

    ModelState.IsValid():判断是否有错误

    用元数据指定验证规则

    System.ComponentModel.DataAnnotations

    Compare 比较两个属性是否相同的值

    Range 一个数字的值的范围

    RegularExpression 输入的字符串必须匹配正则

    Required 非空

    StringLength 字符串长度

  • 相关阅读:
    [翻译] DZNSegmentedControl
    GONMarkupParser的使用
    使用@selector模仿代理功能降低代码耦合度
    编译并导入OpenSSL
    [翻译] TLTagsControl
    [控件] BookTextView
    [控件] AngleGradientView
    【转】jQuery属性过滤选择器
    【转】ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践
    【转】PHP----JS相互调用
  • 原文地址:https://www.cnblogs.com/cuijl/p/6538172.html
Copyright © 2020-2023  润新知