将所选的多选值传递给控制器操作
我正在尝试将所选多选列表的选定值发送到控制器中的操作。 我已经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.4在
jQuery.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参数发布