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

Don*_*ett 5 c# ajax asp.net-mvc jquery jquery-chosen

我正在尝试将所选多选列表的选定值发送到控制器中的操作.我已经验证了val()确实显示了一个选定值的数组,如["33","175"],当我打印到控制台但Action的参数始终为null.我尝试将参数类型更改为object并验证它不是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");
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

控制器动作:

public ActionResult BDOReferralSourcesTableHTML(string[] bdoIds)
{
    return Content("<b>test</b>", "text/html");    
}
Run Code Online (Sandbox Code Playgroud)

Ehs*_*jad 9

你必须将traditionalajax的属性设置为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");
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

$.ajaxSetup({
    traditional:true
   });
Run Code Online (Sandbox Code Playgroud)

更新:

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

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

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

详细信息可以看到的jQuery 1.4发布-全面发行说明的Ajax部分.

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

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