Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于ajax调用的ASP.NET控制器方法_Javascript_C#_Asp.net - Fatal编程技术网

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

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

我有一个带有多选字符串列表的页面。当我选择多个项目并点击apply时,我想进行ajax调用并传入值。在控制器中调试方法时,参数为空

家庭控制器

[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#中的字符串数组