MVC值提供组件和模型绑定组件
2016-03-24 20:44
447 查看
ASP.NET MVC使用DefaultModelBinder类(interface IModelBinder的默认实现)来绑定Model的数据。在传递Action参数的时候,ASP.NET MVC按照如下顺序查找匹配的数据:
form表单中的数据;
RouteData中的数据;
QueryString中的数据;
请求过程中中各组件调用顺序:值提供组件(IValueProvider)-》模型绑定组件(IModelBinder)-》模型验证组件
值提供组件接口
值提供组件
1,NameValueCollectionValueProvider类
NameValueCollectionValueProvider具有两个继承者,即FormValueProvider和QueryStringValueProvider
2,DictionnaryValueProvider/DictionaryValueProvider<TValue>类
NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有相同的Key,Dictionnary却要求元素的Key具有唯一性!
DictionaryValueProvider<TValue>具有三个继承者,RouteDataValueProvider、HttpFileCollectionValueProvider、ChildActionValueProvider
3,ValueProviderCollection类
类型ValueProviderCollection不仅仅表示一个ValueProvider对象的集合,还作为一个单纯的ValueProvider来使用
4,通过FormCollection类读取表单数据
参考:http://www.cnblogs.com/artech/archive/2012/05/17/value-provider-01.html
form表单中的数据;
RouteData中的数据;
QueryString中的数据;
请求过程中中各组件调用顺序:值提供组件(IValueProvider)-》模型绑定组件(IModelBinder)-》模型验证组件
值提供组件接口
public interface IEnumerableValueProvider : IValueProvider { IDictionary<string, string> GetKeysFromPrefix(string prefix); } public interface IUnvalidatedValueProvider : IValueProvider { ValueProviderResult GetValue(string key, bool skipValidation); }
值提供组件
1,NameValueCollectionValueProvider类
NameValueCollectionValueProvider具有两个继承者,即FormValueProvider和QueryStringValueProvider
public sealed class FormValueProvider : NameValueCollectionValueProvider{} public sealed class QueryStringValueProvider: NameValueCollectionValueProvider{}
2,DictionnaryValueProvider/DictionaryValueProvider<TValue>类
NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有相同的Key,Dictionnary却要求元素的Key具有唯一性!
DictionaryValueProvider<TValue>具有三个继承者,RouteDataValueProvider、HttpFileCollectionValueProvider、ChildActionValueProvider
public sealed RouteDataValueProvider : DictionaryValueProvider<object>{} public sealed HttpFileCollectionValueProvider : DictionaryValueProvider<HttpPostedFileBase[]>{} public sealed class ChildActionValueProvider : DictionaryValueProvider<object>{}
3,ValueProviderCollection类
类型ValueProviderCollection不仅仅表示一个ValueProvider对象的集合,还作为一个单纯的ValueProvider来使用
public class ValueProviderCollection : Collection<IValueProvider>, IUnvalidatedValueProvider, IEnumerableValueProvider, IValueProvider{}
4,通过FormCollection类读取表单数据
//.net public sealed class FormCollection : NameValueCollection, IValueProvider{}
//使用方式,控制器内 public ActionResult FormCollection(FormCollection formCollection) { string name=formCollection["name"]; }
public ActionResult FormCollection(FormCollection formCollection) { if (ModelState.IsValid) { var user = new User(); //利用控制器的TryUpdateModel方法,进行转换 TryUpdateModel<User>(user, formCollection); } }
参考:http://www.cnblogs.com/artech/archive/2012/05/17/value-provider-01.html
相关文章推荐
- 201603242031
- js传值到action出现中文乱码问题
- iOS 获取客户端ip
- JavaWeb
- python小程序
- java的服务端与客户端通信(1)
- Java问题总结之32-内存释放
- 非IDE方式手动配置struts2环境之hello_world
- 对大小端模式的学习
- 通过cookie保存并读取用户登录信息实例
- 3.24 58 数据挖掘intern
- Silicon Lab Ember zigbee学习杂谈----custom event
- 安卓应用程序框架研究(一):Activity组件的启动过程
- 学习JavaEE的每一天2016.3.24
- 通过数据得到拟合数据并制图
- css中一些常用选择器的介绍
- 直线分割平面、分割空间
- 堆排序
- 堆排序
- RPC学习(二):RPC的原理分析