ASP.NET MVC以ValueProvider为核心的值提供系统 二

DictionaryValueProvider

NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然就是一个Dictionnary。NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有相同的Key,Dictionnary却要求元素的Key具有唯一性。

一、DictionaryValueProvider<TValue>

DictionnaryValueProvider的类型全名为System.Web.Mvc.DictionaryValueProvider<TValue>,如下面的代码片断所示,DictionaryValueProvider<TValue>实现了IEnumerableValueProvider和IValueProvider接口,构造函数接受一个IDictionary<string, TValue>对象,该对象表示作为数据源的字典。定义在DictionaryValueProvider<TValue>中所有方法的逻辑与定义在NameValueCollectionValueProvider中的同名方法并没有本质区别。

   1: public class DictionaryValueProvider<TValue> : IEnumerableValueProvider, IValueProvider   2: {   3:     public DictionaryValueProvider(IDictionary<string, TValue> dictionary, CultureInfo culture);   4:     public virtual bool ContainsPrefix(string prefix);   5:     public virtual IDictionary<string, string> GetKeysFromPrefix(string prefix);   6:     public virtual ValueProviderResult GetValue(string key);   7: }

二、RouteDataValueProvider

将当前路由数据作为数据源的RouteDataValueProvider继承自DictionaryValueProvider<TValue>。如下面的代码片断所示,基于当前Controller上下文构建的RouteDataValueProvider直接将表示当前路由数据的RouteData对象的Values属性(这是一个RouteValueDictionary对象)作为数据来源。

   1: public sealed class RouteDataValueProvider : DictionaryValueProvider<object>   2: {   3:     public RouteDataValueProvider(ControllerContext controllerContext) :   4:         base(controllerContext.RouteData.Values, CultureInfo.InvariantCulture)   5:     {   6:     }   7: }

三、HttpFileCollectionValueProvider

我们可以通过类型为file的输入元素进行文件的上传,在表示HTTP请求的HttpRequestBase对象中,上传文件通过只读属性Files表示。从下面的代码片断所示,该属性类型为HttpFileCollectionBase,是一个元素类型为HttpPostedFileBase的集合。

   1: public abstract class HttpRequestBase   2: {   3:     public virtual HttpFileCollectionBase Files { get; }   4: }   5: public abstract class HttpFileCollectionBase : NameObjectCollectionBase, ICollection, IEnumerable   6: {   7:     public virtual string[] AllKeys { get; }   8:     public override int Count { get; }   9:     public virtual HttpPostedFileBase this[int index] { get; }  10:     public virtual HttpPostedFileBase this[string name] { get; }  11: }  12: public abstract class HttpPostedFileBase  13: {  14:     public virtual void SaveAs(string filename);  15:  16:     public virtual int ContentLength { get; }  17:     public virtual string ContentType { get; }  18:     public virtual string FileName { get; }  19:     public virtual Stream InputStream { get; }  20: }

用于处理上传文件的Action方法通常定义类型为HttpPostedFileBase及其列表的参数来表示上传的文件,针对HttpPostedFileBase参数的Model绑定选用的数据就来源于表示当前请求的HttpRequestBase的Files属性,而具体参数值的提供最终通过具有如下定义的HttpFileCollectionValueProvider来实现。

   1: public sealed class HttpFileCollectionValueProvider : DictionaryValueProvider<HttpPostedFileBase[]>   2: {   3:     public HttpFileCollectionValueProvider(ControllerContext controllerContext);   4: }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 类型
, 数据源
, public
, virtual
HttpPostedFileBase
,以便于您获取更多的相关知识。

时间: 2025-01-31 10:12:45

ASP.NET MVC以ValueProvider为核心的值提供系统 二的相关文章

ASP.NET MVC以ValueProvider为核心的值提供系统: NameValueCollectionValueProvider

在进行Model绑定过程中,需要根据基于Action方法参数的绑定上下文从请求数据中提取相应的数据以提供相应的数据.具体来说,Model绑定的数据具有多个来源,可能来源于Post的表单或者JSON字符串,或者来源于当前的路由数据,也可能来源于请求地址的插叙字符串.ASP.NET MVC将这种基于不同数据来源的数据获取/提供机制实现在一个叫做ValueProvider的组件中.[本文已经同步到<How ASP.NET MVC Works?>中] 目录 一.IValueProvider与Value

ASP.NET MVC以ValueProvider为核心的值提供系统: ValueProviderFactory

在ASP.NET Model绑定系统中,用于提供数据值的ValueProvider对象通过ValueProviderFactory来创建.在ASP.NET MVC应用编程接口中,ValueProviderFactory继承自ValueProviderFactory类.本篇文章只要介绍基于ValueProviderFactory的ValueProvider的提供机制,以及如何通过自定义ValueProviderFactory实现我们需要的数据值的绑定方式.[本文已经同步到<How ASP.NET

ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider

NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然就是一个Dictionnary.NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有相同的Key,Dictionnary却要求元素的Key具有唯一性.[本文已经同步到<How ASP.NET MVC Works?

ASP.NET MVC以ValueProvider为核心的值提供系统 三

ValueProviderFactory 在ASP.NET Model绑定系统中,用于提供数据值的ValueProvider对象通过ValueProviderFactory来创建.在ASP.NET MVC应用编程接口中,ValueProviderFactory继承自ValueProviderFactory类.本篇文章只要介绍基于ValueProviderFactory的ValueProvider的提供机制,以及如何通过自定义ValueProviderFactory实现我们需要的数据值的绑定方式.

ASP.NET MVC以ValueProvider为核心的值提供系统 一

NameValueCollectionValueProvider 在进行Model绑定过程中,需要根据基于Action方法参数的绑定上下文从请求数据中提取相应的数据以提供相应的数据.具体来说,Model绑定的数据具有多个来源,可能来源于Post的表单或者JSON字符串,或者来源于当前的路由数据,也可能来源于请求地址的插叙字符串.ASP.NET MVC将这种基于不同数据来源的数据获取/提供机制实现在一个叫做ValueProvider的组件中. 一.IValueProvider与ValueProvi

ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider

在<ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator>中我们介绍了ASP.NET MVC用于Model验证的四种ModelValidator,那么这些ModelValidator是如何被创建的呢?ASP.NET MVC的很多组件(比如ModelBinder和Filter)都采用了基于Provider的提供机制,这篇文章为你讲述这些ModelValidator对应的ModelValidatorProvider. 一.ModelVali

ASP.NET MVC以ModelValidator为核心的Model验证体系:ModelValidatorProviders

前面篇文章我们分别介绍用真正用于实施Model验证的ModelValidator(<ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator>),以及用于提供ModelValidator的ModelValidatorProvider(<ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider>),那么对于ASP.NET MVC的Model验证体系来说,最终是通

ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator

旨在为目标Action方法的执行绑定输入参数的Model绑定过程伴随着对Model的验证.借助相应的验证特性,我们可以直接以声明的方式在Model类型上定义验证规则,这些规则将会作为Model元数据的一部分.具体在Model绑定过程中,ModelBinder通过ValueProvider为Model对象的某个属性提供相应属性值之后,会根据定义在基于该属性的Model元数据的验证规则实施验证.ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对

ModelBinder:ASP.NET MVC Model绑定的核心

Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过ParameterDescriptor来描述,ParameterDescriptor的BindingInfo属性表示的ParameterBindingInfo对象具有一个名为ModelBinder的组件用于完成针对当前参数的Model绑定.ModelBinder可以看成是整个Model绑定系统的核心,我们先来认识这个重要的组件. 一. ModelBinder 用于进行M