将所选的多选值传递给控制器​​操作

我正在尝试将所选多选列表的选定值发送到控制器中的操作。 我已经validation了val()确实显示了一个选定值的数组,如[“33”,“175”],当我打印到控制台但Action的参数始终为null。 我尝试将参数类型更改为object并validation它不是null但我无法解析值。 有什么建议? 拜托,谢谢!

Ajax调用:

$(".chosen-select").on("change", function (event, params) { console.log($(".chosen-select").val()); $.ajax({ url: '@Url.Action("BDOReferralSourcesTableHTML","ReferralNetwork")', type: 'GET', dataType: 'json', cache: false, data: { bdoIds: $(".chosen-select").val() }, success: function (response) { if (response.length > 0) { alert(response); } else { alert("response length zero"); } } }); }); 

控制器动作:

 public ActionResult BDOReferralSourcesTableHTML(string[] bdoIds) { return Content("test", "text/html"); } 

你必须将ajax的traditional属性设置为true

 $.ajax({ url: '@Url.Action("BDOReferralSourcesTableHTML","ReferralNetwork")', type: 'GET', dataType: 'json', cache: false, traditional:true, data: { bdoIds: $(".chosen-select").val() }, success: function (response) { if (response.length > 0) { alert(response); } else { alert("response length zero"); } } }); 

你也可以全局设置它,所以不需要在每个ajax调用中指定它:

 $.ajaxSetup({ traditional:true }); 

更新:

以下是您需要设置traditional:true的原因traditional:true

jQuery 1.4jQuery.param添加了对嵌套param序列化的支持,使用PHP推广的方法,并由Ruby on Rails支持。 例如, {foo: ["bar", "baz"]}将被序列化为“foo [] = bar&foo [] = baz”

jQuery 1.3中{foo: ["bar", "baz"]}被序列化为“foo = bar&foo = baz” 。 但是,使用这种方法无法对单元素arrays进行编码。 如果您需要旧的行为,可以通过设置传统的Ajax设置(全局通过jQuery.ajaxSettings.traditional或通过传统标志逐个案例)将其重新打开。

可以看到jQuery 1.4发布的详细信息 Ajax部分的完整发行说明

你也可以在这里看到解释 jQuery 1.4使用数组参数打破ASP.Net MVC操作

另请参阅: jQuery 1.4打破了ASP.NET MVC参数发布