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: }
  • 相关阅读:
    BZOJ 1444 有趣的游戏(AC自动机+矩阵快速幂)
    BZOJ 1190 梦幻岛宝珠(分组01背包)
    BZOJ 1562 变换序列(二分图匹配)
    BZOJ 1483 梦幻布丁(链表+启发式合并)
    BZOJ 1222 产品加工(DP)
    java GUI编程一
    java 网络编程
    java 异常
    java 线程二
    java 线程一
  • 原文地址:https://www.cnblogs.com/lxiang/p/3919025.html
Copyright © 2011-2022 走看看