我有一个包含多选字符串列表的页面。当我选择多个项目并点击应用时,我想进行ajax调用并传入值。当我在控制器中调试方法时,参数为空。
的HomeController
[HttpGet]
public string GetTopLogEvents(string[] filters)
{
// ........
return "";
}
scripts.js中
$('.js-event-level-filter-apply').on('click', function() {
var $this = $(this);
var $filterList = $('.js-event-level-filter');
var filters = $filterList.val();
var obj = {
filters: []
};
$.each(filters, function(key, value) {
obj.filters.push(value);
});
$.ajax({
type: "GET",
url: '/Home/GetTopLogEvents',
data: obj.filters,
success: function(data) {
console.log(data);
}
});
});
如果我在控制器中放置断点,它会命中,但过滤器为空。我究竟做错了什么?
答案 0 :(得分:0)
可能是你需要" stringify"你的阵列。
我首先要将ajax数据部分更改为:
data: {filters: obj.filters}
如果这不起作用,我试试
data: {filters: stringify(obj.filters)}
后者的确切语法可能不正确所以请检查一下。
答案 1 :(得分:0)
您可以打开浏览器,点击F12,然后直接在$ .ajax行上放置一个断点(在sources选项卡的文件中)。然后,运行该方法。当线程在断点处停止时,您是否可以打开控制台选项卡,然后键入“obj.filters”并按Enter键。
是否说“未定义”?
看看你的代码,它“不应该”未定义,但这肯定是一个好的开始。
此外,将您发送的信息字符串化(JSON.stringify()),然后执行JObject调用(c#)将其转换回对象数组可能会有效。