对于简单的自定义类型来说,它可以直接使用参数对象的属性名称来匹配,或者通过参数名称作为前缀来指定,避免有多个参数对象存在属性同名。
数组1、通过同名参数来绑定数组,其元素顺序按照参数顺序来决定:
url::52356/ModelBinderTest/demo5?fields=test111&fields=test222
执行结果:
2、通过添加数组索引来绑定数组,元素顺序与索引一致:
url::52356/ModelBinderTest/demo5?fields[1]=test111&fields[0]=test222
执行结果(注:绑定后的元素顺序与参数下标一致):
3、仅通过索引来绑定数组:
url::52356/ModelBinderTest/demo5?[1]=tes333&[0]=test222
执行结果(注:绑定后的元素顺序与参数下标一致):
简单对象数组
1、通过参数名及数组索引作为前缀来匹配参数中的属性:
url::52356/ModelBinderTest/Demo6?objs[0].field1=test123&objs[0].field2=111111&objs[1].field1=hello&objs[1].field2=world
执行结果:
2、仅通过索引作为前缀来匹配参数中的属性:
url::52356/ModelBinderTest/Demo6?[1].field1=test123&[1].field2=111111&[0].field1=hello&[0].field2=world
执行结果(注意顺序):
自定义类型字典
1、通过参数名称及其索引为前缀,Key、Value来分别关联字典中相应的值:
url::52356/ModelBinderTest/Demo7?objs[0].Key=1&objs[0].Value.field1=hello&objs[0].Value.field2=world
执行结果:
2、仅使用索引为前缀,Key、Value来分别关联字典中相应的值:
url::52356/ModelBinderTest/Demo7?[0].Key=1&[0].Value.field1=hello&[0].Value.field2=world&[1].Key=2&[1].Value.field1=hello1&[1].Value.field2=world1
执行结果:
包含数组的自定义类型
通过参数名称、属性名称、索引来完成绑定:
url::52356/ModelBinderTest/Demo8?obj.field1=hello&obj.field2=world&obj.simplyobjects[0].field1=hello1&obj.simplyobjects[0].field2=world1
执行结果:
多种数据源的数据获取
上面的例子均是以QueryString做为数据源来绑定数据,但是也提到过数据源除此之外还有FormData和RouteData,所以如果一个对象的数据分别位于多个数据源中,是否能够正常绑定呢?现在以绑定一个简单自定义对象为例,使用QueryString和RouteData为数据源查看对象的绑定结果:
url::52356/ModelBinderTest/Demo9/1/test123/?field2=111111
路由: