我搜索了相关的问题,但仍然无法在我的情况下使用它。我在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调用接收数组?
答案 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);
的代码,如前面的答案所述。