ASP.NET MVC Model绑定小结
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绑定小结的更多相关文章
- ASP.NET MVC Model绑定(六)
ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...
- ASP.NET MVC Model绑定(五)
ASP.NET MVC Model绑定(五) 前言 前面的篇幅对于IValueProvider的获取位置和所处的生成过程做了讲解,本篇将会对IValueProvider的使用做个基础的示例讲解,读完本 ...
- ASP.NET MVC Model绑定(四)
ASP.NET MVC Model绑定(四) 前言 前面的篇幅对于Model绑定器IModelBinder以及实现类型.Model绑定器提供程序都作了粗略的讲解,可以把Model绑定器想象成一个大的容 ...
- ASP.NET MVC Model绑定(三)
ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...
- ASP.NET MVC Model绑定(二)
ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...
- ASP.NET MVC Model绑定(一)
ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...
- ASP.NET MVC Model绑定
ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...
- ModelBinder——ASP.NET MVC Model绑定的核心
ModelBinder——ASP.NET MVC Model绑定的核心 Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过 ...
- ASP.NET MVC Model绑定的简单应用
Model绑定是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程. 一.简单类型 1.单一值
随机推荐
- SQLSERVER取当前月第一天和最后一天
--本月第一天: select dateadd(dd,-day(getdate())+1,getdate()) --本月最后一天: SELECT dateadd(ms,-3,DATEADD(mm, ...
- [stm32] 一个简单的stm32vet6驱动2.4寸240X320的8位并口tft屏DEMO
书接上文: 最近在研究用低速.低RAM的单片机来驱动小LCD或TFT彩屏实现动画效果 首先我用一个16MHz晶振的m0内核的8位单片机nRF51822尝试驱动一个1.77寸的4线SPI屏(128X16 ...
- [stm32] STM32 Interrupts and events 系统了解(EXTI)及槽型光电开关tp850电路研究
中断和事件 1 嵌套向量中断控制器 特性: ● 68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线):● 16个可编程的优先等级(使用了4位中断优先级):● 低延迟的异常和中断处理:● 电 ...
- JQuery checkbox check/uncheck
想通过JQuery来check或者uncheck页面上的checkbox控件,我们可能会想到用下面的代码: $('#chk-all').on('click', function(){ var chec ...
- IOS 推送-配置与代码编写
IOS 推送配置与代码编写 这里介绍IOS的推送,本文章已经在IOS6/7/8上都能运行OK,按照道理IOS9应该没问题. 大纲: 1.文章前提 2.推送介绍 3.推送文件账号设置 4.推送证书介绍 ...
- nginx负载下站点错误响应会导致其他节点重复响应问题的解决过程
目录 前言 问题来了 问题又来了 问题分析 困惑 转机 后续 前言: 这是我上周工作过程中的一次解决问题的过程.解决的是nginx负载下站点错误响应导致其他节点重复响应. 我在整理这个记叙文时,在给这 ...
- iis日志查看
IIS日志是每个服务器管理者都必须学会查看的,服务器的一些状况和访问IP的来源都会记录在IIS日志中,所以IIS日志对每个服务器管理者非常的重要,seoer也不例外,这点同时也可方便网站管理人员查看网 ...
- redis中使用redis-dump导出、导入、还原数据实例
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/109.html?1455861283 redis的备份和还原,借助了第三方 ...
- 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS
回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...
- Nginx下WordPress的Rewrite
最近接触WP Super Cache,该插件要求固定链接必须是重写的,故用到Rewrite. 我的是这样配置的: /usr/local/nginx/conf/rewrite/wordpress.con ...