Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么默认模型绑定器的行为不同?_C#_Asp.net_Asp.net Mvc 4_Model Binding_Custom Model Binder - Fatal编程技术网

C# 为什么默认模型绑定器的行为不同?

C# 为什么默认模型绑定器的行为不同?,c#,asp.net,asp.net-mvc-4,model-binding,custom-model-binder,C#,Asp.net,Asp.net Mvc 4,Model Binding,Custom Model Binder,我正在创建API,其中包含以下url /api/abc/?q=1&a=2&b=3&b=4 ^^^^^^^ Input.cs(模型绑定中使用的类) 我使用的是.NET的默认ModelBinding,但问题是当我传递上述url时,会将以下值分配给属性 obj.A = "2" // here obj is object of Input class obj.B = "3" obj.Q = "1" 我期望obj.B=“3,4”(当我执行

我正在创建API,其中包含以下url

/api/abc/?q=1&a=2&b=3&b=4
                  ^^^^^^^
Input.cs(模型绑定中使用的类)

我使用的是.NET的默认ModelBinding,但问题是当我传递上述url时,会将以下值分配给属性

obj.A = "2"   // here obj is object of Input class
obj.B = "3"
obj.Q = "1"
我期望
obj.B=“3,4”
(当我执行Request.QueryString[“B”]时,它将输出为“3,4”),但它仅绑定第一个值

为什么会发生这种情况?(我不知道默认ModelBinding的内部结构,但我猜它是在某处使用Request.QueryString进行绑定的)

有人能告诉我为什么会发生这种情况,以及如何将“3,4”作为obj.B值吗?

我得到B的“3,4”的方法是

使用自定义模型活页夹,我完成了以下工作

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    object model = base.BindModel(controllerContext, bindingContext);
    var obj = model as Input;
    obj.B = Request.QueryString["b"];
}

您正在为
B
发送多个值,这意味着您需要创建
B
集合。注意
DefaultModelBinder
绑定第一个匹配的名称/值对,如果属性不是
IEnumerable
,则忽略其余部分

将属性更改为

public IEnumerable<string> B { get; set; }
公共IEnumerable B{get;set;} 它将包含这两个值(如果您确实想要
3,4
,可以在数组上使用
String.Join

public IEnumerable<string> B { get; set; }