[续《通过实例模拟ASP.NET MVC的Model绑定机制:简单类型+复杂类型]》]基于数组和集合类型的Model绑定机制比较类似,对于绑定参数类型或者参数类型的某个属性为数组或者集合,如果ValueProvider根据对应的Key能够匹配多条数据,那么这些数据最终将会转换为绑定的数组/集合的元素。此外,针对数组/集合的Model绑定还支持基于索引的方式。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》中]
对于针对NameValueConllectionProvider来说,通过GetValue方法得到的ValueProviderResult的RawValue总是一个字符串数组(不论是否具有多条数据于指定的Key相匹配,如果只有一条匹配的数据,RawValue就是一个具有一个元素的字符串数组)。当我们调用ValueProviderResult的ConvertTo方法将提供的值转换成某种类型时,如果目标类型是数组或者集合,那么RawValue代表的字符串数组元素将会转换成目标对象的元素;如果目标类型不属于集合,那么参与数据转换的仅仅是RawValue数组的第1个元素。
如下面的代码片断所示,在默认的HomeController的默认Action方法Index中,我们创建了一个NameValueCollectionValueProvider对象,作为数据源的NameValueCollection中包含了三个同名(foo)数据条目。我们调用它的GetValue方法得到一个ValueProviderResult对象,然后我们将该对象的RawValue呈现出来。最后我们调用该ValueProviderResult对象的ConvertTo对象将提供的值转换为int[]和int,并将转换后的值呈现出来。
2: {
void Index()
4: {
new NameValueCollection();
);
);
);
new NameValueCollectionValueProvider(dataSource, CultureInfo.InvariantCulture);
10:
);
, result.RawValue));
int[]))));
int))));
15: }
16: }