[英]MVC How To Pass Array(Guid CustomerIDs) And a Single Value To Controller
我正在使用JavaScript和Ajax将数组和单个值传递给控制器,当调用被调用的控制器方法时,传递的是单个值而不是(customerID的数组),我想知道为什么,这是代码!
这是我的JavaScript和Ajax调用:
var arrayOfCustomerID = ['11111111 - 1111 - 1111 - 1111 - 111111111112', '4b732df8-3bbc-4eab-9bf1-da98cc46d527' ,
'3e74adeb-31a8-4d6f-a66b-a34500c3acc0',' 14897bf4-f5d0-4548-a74d-a34f00ae9cad'];
var version = '3.0';
$.ajax({
url: '/Updates/UpdateCustomers',
type: "POST",
datatype: "json",
traditional: true,
data: {
CustomerIDs: JSON.stringify(arrayOfCustomerID),
Version: version
},
success: function (data) {
alert("success");
}
});
这是我的课:
public class SelectedCustomersWithVersion
{
public List<Guid> CustomerIDs { get; set; }
public string version { get; set; }
}
最后是我的控制器方法:
[HttpPost]
public ActionResult UpdateCustomers(SelectedCustomersWithVersion model)
{
IList a = model.CustomerIDs.ToList();
var b = model.version;
return view();
}
当我在控制器模型上设置一个断点时,我得到了model.CustomerIds:Count = 0,model.Version:“ 3.0”
我不知道为什么要获得Customerids = 0计数,代码有问题吗? 感谢帮助 !
这是由于您将参数传递给action方法的方式。 在当前方法中,您将它们作为一个参数发送,并以逗号分隔的字符串形式接收,而活页夹不会将其转换为List<Guid>
。
以下Fiddler捕获显示了如何发送参数:
为了使模型绑定器正确绑定List<T>
,需要使用相同的名称或分配的索引分别发送参数。
例如,以下两种方法都将起作用:
?customerIDs=1111...&customerIDs=4b73...&customerIDs=3e...
?customerIDs[0]=1111...&customerIDs[1]=4b73...&customerIDs[2]=3e...
在第二个示例中,索引必须从零开始且无间隙。
为了使它起作用,您可以将jQuery代码更改为:
arrayOfCustomerID = [];
arrayOfCustomerID[0] = '11111111 - 1111 - 1111 - 1111 - 111111111112';
arrayOfCustomerID[1] = '4b732df8-3bbc-4eab-9bf1-da98cc46d527';
arrayOfCustomerID[2] = '3e74adeb-31a8-4d6f-a66b-a34500c3acc0';
arrayOfCustomerID[3] = ' 14897bf4-f5d0-4548-a74d-a34f00ae9cad';
var version = '3.0';
$.ajax({
url: '/api/values',
type: "POST",
datatype: "json",
traditional: true,
data: {
CustomerIDs: arrayOfCustomerID,
Version: version
},
success: function (data) {
alert("success");
}
});
这将发送如下参数:
然后将成功绑定到您的模型:
最后一点,我必须从您的第一个Guid
中删除空格以使其绑定。
我认为MVC无法自动将字符串数组(客户端)绑定到GUID数组(服务器端)。
尝试将视图模型( SelectedCustomersWithVersion
)更改为使用字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.