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: }
  • 相关阅读:
    Potato工作流管理系统 组织模型用例描述
    6/27 项目编码开始:一个简单的员工管理程序
    6/16 6/17加班2天
    重新过一遍ASP.NET 2.0(C#)(8) DataSourceControl(数据源控件)
    可行性分析报告结构
    6/27 一个简单的员工管理程序:添加微软成员资格数据表
    在asp.net 2.0中使用母版页和工厂方法模式
    工作流功能特性
    6/21 系统分析阶段汇报
    什么是工作流
  • 原文地址:https://www.cnblogs.com/lxiang/p/3919025.html
Copyright © 2011-2022 走看看