将选择的多选择值传递给控制器动作

本文关键字:选择 控制器 值传 | 更新日期: 2023-09-27 18:16:05

我试图将选定的多选择列表的选定值发送到我的控制器中的操作。当我打印到控制台时,我已经验证了val()确实向我显示了一个选定值的数组,如["33","175"],但Action的参数始终为空。我尝试将参数类型更改为对象,并验证它不是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("<b>test</b>", "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 :

的原因如下

jQuery 1.4 jQuery.param 中增加了对嵌套参数序列化的支持,采用了PHP推广的方法,并得到Ruby on Rails的支持。例如, {foo: ["bar", "baz"]} 将序列化为"foo [] = bar& foo[] =巴兹"

在<<p> strong> jQuery 1.3 , {foo: ["bar", "baz"]} 被序列化为"foo = bar& foo =巴兹"。但是,无法使用这种方法对单元素数组进行编码。如果您需要旧的行为,可以通过设置传统的Ajax设置(全局通过 jQuery.ajaxSettings.traditional 或逐个通过传统标志)来重新启用它。

详情可以在Ajax一节中看到jQuery 1.4发布-完整发布说明

您也可以在这里看到的解释。jQuery 1.4打破了ASP。带有数组参数的。MVC动作

参见:jQuery 1.4打破ASP。. NET MVC参数张贴