Javascript 用于ajax调用的ASP.NET控制器方法
我有一个带有多选字符串列表的页面。当我选择多个项目并点击apply时,我想进行ajax调用并传入值。在控制器中调试方法时,参数为空 家庭控制器Javascript 用于ajax调用的ASP.NET控制器方法,javascript,c#,asp.net,Javascript,C#,Asp.net,我有一个带有多选字符串列表的页面。当我选择多个项目并点击apply时,我想进行ajax调用并传入值。在控制器中调试方法时,参数为空 家庭控制器 [HttpGet] public string GetTopLogEvents(string[] filters) { // ........ return ""; } scripts.js $('.js-event-level-filter-apply').on('click', function() { var $this
[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);
}
});
});
如果我在控制器中放置断点,它会命中,但筛选器为空。我做错了什么 可能是您需要“字符串化”阵列 我首先将ajax数据部分更改为如下所示:
data: {filters: obj.filters}
如果不行,我会试试
data: {filters: stringify(obj.filters)}
后者的确切语法可能不正确,因此请检查。能否打开浏览器,点击F12,并直接在$.ajax行(在“源文件”选项卡中)上设置断点。然后,运行该方法。当线程停止在断点上时,可以打开控制台选项卡,键入“obj.filters”并按enter键 它是说“未定义”吗 看看您的代码,它“不应该”是未定义的,但这肯定是一个好的开始
另外,对发送的信息进行字符串化(JSON.stringify()),然后执行JObject调用(c#)将其转换回对象数组可能会起作用。您读过参数绑定的工作原理吗?所以我使用了第二个版本,现在参数已经完成了。filters数组只有一个值,它的值为[0]“[\“error\”,“\“warning\”]”。当您在控制器上点击您的操作时,是否检查了请求对象以查看这些值是否隐藏在其中?这应该允许查看服务器接收到的原始数据,以确保所有选项都被发回。解决这一问题的简单方法是,获取字符串值的对象,通过for循环将它们添加到带有管道分隔符的单个字符串中,并通过AJAX传递单个字符串。然后,使用“string[]myList=ajaxPostData.Split(“|”)将其解析回C#中的字符串数组