用于ajax调用的ASP.NET控制器方法

时间:2016-01-13 23:55:10

标签: javascript c# asp.net

我有一个包含多选字符串列表的页面。当我选择多个项目并点击应用时,我想进行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);
        }
    });
});

如果我在控制器中放置断点,它会命中,但过滤器为空。我究竟做错了什么?

2 个答案:

答案 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#)将其转换回对象数组可能会有效。