ASP.NET MVC三个重要的描述对象:ParameterDescriptor2012-08-28 博客园 ArtechModel绑定是为作为目标Action的方法准备参数列表的过程,所以针对参数的 描述才是Model绑定的核心。在ASP.NET MVC应用编程接口中,服务于Model绑定的 参数元数据通过ParameterDescriptor类型来表示,而ActionDescriptor的 GetParameters方法返回的就是一个ParameterDescriptor数组。如下面的代码片断所示,ParameterDescriptor同样实现了 ICustomAttributeProvider接口提供应用在相应参数上的特性。 ParameterDescriptor的只读属性ActionDescriptor表示描述所在Action方法的 ActionDescriptor对象。属性ParameterName、ParameterType和DefaultValue分 别表示参数的名称、类型和默认值。
 1: public abstract class ParameterDescriptor : ICustomAttributeProvider
 2: {
 3: public virtual object[] GetCustomAttributes(bool inherit);
 4: public virtual object[] GetCustomAttributes(Type attributeType, bool inherit);
 5: public virtual bool IsDefined(Type attributeType, bool inherit);
 6:
 7: public abstract ActionDescriptor ActionDescriptor { get; }
 8: public abstract string ParameterName { get; }
 9: public abstract Type ParameterType { get; }
10: public virtual object DefaultValue { get; }
11:
12: public virtual ParameterBindingInfo BindingInfo { get; }
13: }
ParameterDescriptor的只读属性BindingInfo表示的 System.Web.Mvc.ParameterBindingInfo对象封装一些信息用于控制请求数据与参 数的绑定行为。如下面的代码片断所示,抽象类ParameterBindingInfo具有四个 属性,其中类型为IModelBinder的Binder属性返回的ModelBinder对象是整个 Model绑定的核心,我们将在本章后续部分进行单独介绍。
 1: public abstract class ParameterBindingInfo
 2: {
 3: public virtual IModelBinder Binder { get; }
 4:
 5: public virtual ICollection<string> Include { get; }
 6: public virtual ICollection<string> Exclude { get; }
 7: public virtual string Prefix { get; }
 8: }
如果参数类型是一个复杂类型,默认情况下会绑定其所有公共可读写属性,而 两个ICollection<string>类型的属性Include和Exclude表示显示设置的参 与/不参与绑定的属性名称列表。在默认情况下,请求数据与参数之间严格按照名 称进行绑定,但是有时候请求数据名称具有相应的前缀,这个前缀体现在 ParameterBindingInfo的Prefix属性上。