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: }
  • 相关阅读:
    对象属性键值[key]属性问题
    理解 JavaScript 中的 for…of 循环
    vue初学篇----过滤器(filters)
    CSS变量
    SCSS !default默认变量
    vue 集成 NEditor 富文本
    如何在Github上面精准搜索开源项目?
    OSS介绍
    键盘各键对应的编码值(key code)
    网易云音乐歌单生成外链播放器
  • 原文地址:https://www.cnblogs.com/lxiang/p/3919025.html
Copyright © 2011-2022 走看看