使用ajax javascript传递一个int数组给MVC控制器

passing an array of int to MVC controller using ajax javascript

本文关键字:int 一个 数组 控制器 MVC javascript ajax 使用      更新时间:2023-09-26

我哪里做错了?

我可以成功地传递4 bool参数到控制器。现在我想传递一个int数组到我的控制器,但它不起作用-我在示例中留下了我的工作代码(注释掉),所以你可以看到我没有改变那么多-我想我错过了一些简单的东西(毕竟是17:44 !!)。我可以看到数组是使用alert(rolesChecked);语句填充的:

var rolesChecked = [];
$('[type="checkbox"].role-checkbox').each(function () {
    if (this.checked)
    {
        rolesChecked.push($(this).val());
    }
});
alert(rolesChecked);
//var administrator = $('#cbAdministrator').is(":checked");
//var manager = $('#cbManager').is(":checked");
//var technician = $('#cbTechnician').is(":checked");
//var transcriber = $('#cbTranscriber').is(":checked");
if (rolesChecked.count > 0){//administrator || manager || technician || transcriber) {
    $.ajax({
        url: '@Url.Action("GetFutureHolidays", "Employee")',
        type: 'GET',
        dataType: 'json',
        // we set cache: false because GET requests are often cached by browsers
        // IE is particularly aggressive in that respect
        cache: false,
        data: {
            roleIdXXXs: rolesChecked
            //includeAdministrator: administrator,
            //includeManager: manager,
            //includeTechnician: technician,
            //includeTranscriber: transcriber
        },
        success: function (data) {
            //do something...
        }
    });
}
控制器动作:

public string GetFutureHolidays(List<int> roleIdXXXs)//bool includeAdministrator, bool includeManager, bool includeTechnician, bool includeTranscriber)
{
    //do something
}

在旧代码中,控制器动作将被击中…对于数组,它永远不会被击中…我错过了什么…

也,我认为List<int> roleIdXXXs应该是好的,但我也尝试了List<string>, int[]string[],以防它不是!!

您需要添加traditional: true ajax选项以将数组发送回集合

$.ajax({
    url: '@Url.Action("GetFutureHolidays", "Employee")',
    type: 'GET',
    dataType: 'json',
    cache: false,
    data: { roleIdXXXs: rolesChecked },
    traditional: true, // add this
    success: function (data) {
    }
});

在if语句中,而不是rolesChecked。使用rolesChecked.length

您不能从Ajax提交这样的列表,您正在使用的过程中最快的修复方法是使用序列化-脱盐过程,您可以将其发送为

roleIdXXXs: JSON.stringify(rolesChecked)

在行动:

public ActionResult GetFutureHolidays(string rolesChecked)
{
    var test = new JavaScriptSerializer().Deserialize<List<int>>(rolesChecked);
}

您应该像这样在AJAX调用上使用JSON.stringify():

data: {
            roleIdXXXs: JSON.stringify(rolesChecked)
            //includeAdministrator: administrator,
            //includeManager: manager,
            //includeTechnician: technician,
            //includeTranscriber: transcriber
        }