zoukankan      html  css  js  c++  java
  • mvc action 参数绑定——值提供器【学习笔记】

    每次http请求的各种数据(表单数据、url的数据、路由数据等等)都保存在不同的IValueProvider接口的实现类中。

    而IValueProvider接口的实现类是通过ValueProviderFactory创建的。

    在mvc中原生的ValueProviderFactory有六种:

    • ChildActionValueProviderFactory:根据给定的Controller上下文创建一个ChildActionValueProvider对象。
    • FormValueProviderFactory:根据给定的Controller上下文创建一个FormValueProvider对象。
    • JsonValueProviderFactory:将以JSON形式表示的请求数据转换成一个Dictionary<string, object>对象,并最终创建一个DictionaryValueProvider<object>对象。
    • RouteDataValueProviderFactory:根据给定的Controller上下文创建一个RouteDataValueProvider对象。
    • QueryStringValueProviderFactory:根据给定的Controller上下文创建一个QueryStringValueProvider对象。
    • HttpFileCollectionValueProviderFactory:根据给定的Controller上下文创建一个HttpFileCollectionValueProvider对象。

    ValueProviderFactory需要注册到ValueProviderFactories的静态属性Factories中,才能被使用。

       1: public static class ValueProviderFactories
       2: {
       3:     public static ValueProviderFactoryCollection Factories { get; }
       4: }
       6: public class ValueProviderFactoryCollection : Collection<ValueProviderFactory>
       7: { 
       8:     public ValueProviderFactoryCollection();
       9:     public ValueProviderFactoryCollection(IList<ValueProviderFactory> list);    
      10:     public IValueProvider GetValueProvider(ControllerContext controllerContext);
      11: }


    系统首先通过ValueProviderFactories类的静态属性获得ValueProviderFactoryCollection ,然后通过GetValueProvider方法获得一个ValueProviderCollection,ValueProviderCollection就是值提供器集合。

       1: public class ValueProviderCollection : Collection<IValueProvider>, IUnvalidatedValueProvider, IEnumerableValueProvider, IValueProvider
       2: {
       3:     public ValueProviderCollection();
       4:     public ValueProviderCollection(IList<IValueProvider> list);
       6:     public virtual bool ContainsPrefix(string prefix);
       7:     public virtual IDictionary<string, string> GetKeysFromPrefix(string prefix);  
       8:     public virtual ValueProviderResult GetValue(string key);
       9:     public virtual ValueProviderResult GetValue(string key, bool skipValidation);   
      10: }
  • 相关阅读:
    idea报错。Error:Failed to load project configuration: cannot parse xml file E:project.ideaworkspace.xml: Error on line 1: 前言中不允许有内容。
    数据库索引的使用
    sql查询每个学生的最高成绩mysql语句
    Tomcat下没有编译后的class文件
    fullpage中大的图片超过一屏怎么在手机端滑动显示?
    springmvc拦截器的配置、使用
    过滤器、拦截器中重定向无限循环问题解决
    Linux下的Memcache安装
    Windows下的Memcache安装
    jQuery学习资源参考教程网址推荐
  • 原文地址:https://www.cnblogs.com/lxiang/p/3919025.html
Copyright © 2011-2022 走看看