Model绑定是指从URL提取数据,生成对应Action方法的参数这个过程。前面介绍的一系列Descriptor负责提供了控制器,行为方法和参数的元数据,ValueProvieder负责获取数据,剩下的Moder绑定则是利用上述两者的结果来最终达到Model的生成。ParameterDescriptor里面的BindingInfo(类型是ParameterBindingInfo)的Binder是一个实现了IModelBinder接口的对象,ModelBinder组件用于真正的Model绑定。

ModelBinder组件

下面则先看组件的类图

IModelBinder:BindModel方法,实现Model绑定功能的方法,传入ControllerContext和ModelBindingContext返回绑定完毕的Model。

CustomModelBinderAttribute:抽象特性,完成Model与ModelBinder之间的绑定处理,里面的GetBinder方法用于获取ModelBinder。

ModelBinderAttribute:CustomModelBinderAttribute的唯一继承,可用于参数,接口,枚举,结构,类的特性中,但是只有作为Action方法的参数特性时才会在ParameterDescriptor解析的时候解析出来。

IModelBinderProvider:MVC框架中没有一个类实现这个接口,主要用于进行自定义扩展。GetBinder方法用于按指定类型获取ModelBinder。

ModelBinderProviderCollection:对于IModelBinderProvider的一个集合。

ModelBinderProviders:拥有只读属性BinderProviders,是ModelBinderProviderCollection类型。

ModelBinderDictionray:IModelBinder的字典集合,以Model的数据类型Type为Key,对应的ModelBinder为Value的字典集。

ModelBinders:具有Binders的只读属性,类型是ModelBinderDictionray,只用于获取ModelBinderDictionray。

获取ModelBinders的机制:它一般是先从ParameterDescription里面检查ModelBinder是否存在,如果该ModelBinder不存在,就使用ModelBinders.Binders属性中获取,实际上是从ModelBinderDictionary的内部集合_innerDictionary或_modelBinderProviders中获取;如果在上述两个集合中也无法获取,则使用ModelBinderDictionary中的默认MolderBinder——_defaultBinder。

按照上述的获取机制,在定制数据类型的ModelBinder时,使用不同的方式,ModelBinder获取时也会有不同的优先级:

  1)为Action方法上的参数加上ModelBinderAttribute或CustomModelBinderAttribute特性;

  2)自定义ModelBinderProvider未某种Model数据提供ModelBinder,使用ModelBinderProviders.BinderProviders.Add方法添加到集合中去

  3)为Model类型加上ModelBinderAttribute或CustomModelBinderAttribute特性

  4)通过ModelBinders的Binders属性添加ModelBinder。

ModelState

  Model绑定除了把值绑定到Action方法的参数上,同样也会绑定到Controller的ViewData中,下图则是列举了ModelState相关的类。

ModelBindingContext

  ModelBindingContext:具有一系列来自于ParameterDescriptor的属性。ModelBinderContext的生成以及发挥作用如下图所示

ASP.NET MVC Model绑定小结的更多相关文章

  1. ASP.NET MVC Model绑定(六)

    ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...

  2. ASP.NET MVC Model绑定(五)

    ASP.NET MVC Model绑定(五) 前言 前面的篇幅对于IValueProvider的获取位置和所处的生成过程做了讲解,本篇将会对IValueProvider的使用做个基础的示例讲解,读完本 ...

  3. ASP.NET MVC Model绑定(四)

    ASP.NET MVC Model绑定(四) 前言 前面的篇幅对于Model绑定器IModelBinder以及实现类型.Model绑定器提供程序都作了粗略的讲解,可以把Model绑定器想象成一个大的容 ...

  4. ASP.NET MVC Model绑定(三)

    ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...

  5. ASP.NET MVC Model绑定(二)

    ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...

  6. ASP.NET MVC Model绑定(一)

    ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...

  7. ASP.NET MVC Model绑定

    ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...

  8. ModelBinder——ASP.NET MVC Model绑定的核心

    ModelBinder——ASP.NET MVC Model绑定的核心 Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过 ...

  9. ASP.NET MVC Model绑定的简单应用

    Model绑定是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程. 一.简单类型 1.单一值

随机推荐

  1. java提高篇(二九)-----Vector

    在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...

  2. windows 8.1 试用感受:蛋疼感大幅降低

    众所周知windows 8 的最大使用感受就是蛋疼. 无论是微软MVP,还是我这样的万年不悔微软小白鼠,普通用户,小白用户,或多或少的都对这款操作系统感到蛋疼. 槽点太多,以至于大家都懒得批判了.好在 ...

  3. 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  4. Atitit 基于dom的游戏引擎

    Atitit 基于dom的游戏引擎 1. 添加sprite控件(cocos,createjs,dom)1 1.1.1. Cocos1 1.1.2. createjs1 1.1.3. Dom模式2 1. ...

  5. meta标签的小拓展

    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1, ...

  6. 元素多层嵌套,JS获取问题

    如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧. HTML: <!DOCTYPE html> <ht ...

  7. word-wrap: break-word; break-word: break-all;区别

    word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行. 它们的区别就在于: 1,word-break:break-all 例如div宽 ...

  8. 小实例窥探dotnet垃圾回收

    今天项目调试时发现VS中有下面这样的现象. 说明,file.ServerLocation是一个完整的物理路径.第三句代码是错误的,保留只是因为它使用了"s"字符串.   个人认为当 ...

  9. 《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌

    数据准备:一组股票历史成交数据(股票代码:601106 中国一重),起止日期:2011-01-04至今,其中变量有“开盘”.“最高”.“最低”.“收盘”.“总手”.“金额”.“涨跌”等 UPDATE ...

  10. sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨

    写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合.  在不 ...