Ajax没有将数组传递给Controller Action?

时间:2016-05-23 20:33:30

标签: javascript c# jquery asp.net ajax

我搜索了相关的问题,但仍然无法在我的情况下使用它。我在ASP.NET MVC工作。

我有一个包含3个过滤器的报告。滤波器1和2只能选择1个值。我的第3个滤波器是多选滤波器。我加载一个数组,其中包含从多选过滤器中选择的所有值,然后我想将所有3个过滤器传递给我的控制器操作。过滤器1和2正常工作,但我的多选过滤器未被传递,并且在我的Actions参数中显示为Null。

以下是我的JavaScript和Ajax调用

$('#applyFilter').click(function () {

            var options = new Array();
            //Fill array with values from Multi Select Filter
            $('#treeFilter > option:selected').each(
                function (i) {
                    options[i] = $(this).text();
                })


            var filter1 =  $('#LOCFilterDropdown').val();
            var filter2 = $('#ESNFilterDropdown').val();

            $.ajax({
                type: "GET",
                url: "/Home/FilterReport",

                data: {
                    filterOne: filter1,
                    filterTwo: filter2,
                    multiselectFilter: options
                },
                success: function (result) {
                    $('#reportTable').html(result);
                }
            });
        });

接收行动

[HttpGet]
public ActionResult FilterReport(string filterOne,string filterTwo, int? page, List<string> multiselectFilter)
{
     //filterOne contains correct value
     //filterTwo contsins correct value
     //multiSelectFilter contains null

     //returns partial view

}

谁能告诉我为什么我的

List<string> multiselectFilter
//Iv also tried string[] multiselectFilter, but this didnt change anything

现在从ajax调用接收数组?

3 个答案:

答案 0 :(得分:1)

你也可以尝试在你的ajax调用添加中添加这些:

dataType: "json",
traditional: true

如果options数组可能变大,我会使用POST以避免达到url max length limit。

答案 1 :(得分:0)

您正在尝试使用GET方法发送复杂对象。失败的原因是GET方法不能有一个正文,所有的值都被编码到URL中。

类似问题

Complex type is getting null in a ApiController parameter

我只是在客户端加入Multiselectfilter并在服务器端分割它们

 multiselectFilter: options.join(',')

[HttpGet]
    public ActionResult FilterReport(string filterOne, string filterTwo, int? page, string multiselectFilter)
    {
        string[] array = multiselectFilter.Split(',');

        //returns partial view

    }

答案 2 :(得分:0)

我创造了一个小提琴here。我想你可能会遇到序列化问题。虽然我不是百分百肯定。以下是序列化options = JSON.stringify(options);的代码,如前面的答案所述。