将数组从ajax调用传递给控制器​​,控制器中的数组为空

Posted

技术标签:

【中文标题】将数组从ajax调用传递给控制器​​,控制器中的数组为空【英文标题】:passing an array from ajax call to controller, array empty in controller 【发布时间】:2021-04-28 11:05:31 【问题描述】:

谁能建议我在这里需要改变什么?

我从包含“已更改”类的元素中获取类,我得到的类包含我想传递给控制器​​方法的 id。

当我查看网络选项卡时,我可以在负载中看到我想要的数据,它看起来像这样:

"list":["GroupId-1","SubGroupId-2","changed"]

但是当我在控制器上放置断点时,列表为空。

这是我在控制器方法中期望的类:

public class MemberGroups

    public string GroupId  get; set; 
    public string SubGrouId  get; set; 
    public string Status  get; set; 

用于保存的javascript

function Savechanges() 
        var spans = document.getElementsByClassName("changed");
        var list = [];

        $.each(spans,
            function (key, value) 
                $.each(value.classList,
                    function (key, value) 
                        list.push(value);
                    );
            );
        var dataToPost = JSON.stringify( list: list );

        $.ajax(
            url: "/umbraco/Api/OrganisationMemberGroupsDashboardApi/UpdateMemberToGroup",
            data:  JSON.stringify( list ),
            type: "POST",
            contentType: "application/json; charset=utf-8", // specify the content type
        )
            .done(function (data) 
             
            );
    

控制器

public string UpdateMemberToGroup( List<MemberGroups> list)

    // save records

span 是动态创建的并添加到树视图中。当它们被拖放时,所有类都被删除,然后“更改”类与 id 类一起添加,所以我只将我需要的类传递给控制器​​

var s = document.createElement('span');
s.classList.add('node-facility');
s.classList.add('ui-droppable');
s.classList.add('GroupId-' + value.GroupId);
s.classList.add('SubGroupId-0');
s.id=('GroupId-' + value.GroupId);
s.appendChild(document.createTextNode(value.GroupName));

【问题讨论】:

你能显示你的跨度数据吗? 刚刚更新了帖子,谢谢 谢谢,但我想看看你的 spans var 。 【参考方案1】:

这个变种是使用 postman body json 测试的 - ["GroupId-1","SubGroupId-2","已更改"]

将您的 ajax 数据更改为:

data:  list,

和你的控制器动作:


public string UpdateMemberToGroup([FromBody] []string list)

var memberGroups = new MemberGroups

    GroupId =list[0],
   SubGrouId =list[1],
    Status =list[2]
;
    // save records

这个变种在邮递员中使用 “GroupId”:“GroupId-1”,“SubGroupId”:“SubGroupId-2”,“状态”:“已更改”

你可以把代码放在javascript中:

var data=GroupId:list[0],SubGroupId:list[1], Status:list[2]

......
....

data:data,
.....

在这种情况下您的控制器操作:

public string UpdateMemberToGroup([FromBody] MemberGroups memberGroups)

    // save records


而且我不知道您使用的是哪个版本的 MVC,但对于某些版本而不是 [FromBody] 最好使用 [FromForm] 或根本不使用任何东西。

【讨论】:

感谢您的建议,尽管两者仍然将 null 传递给控制器​​ 它适用于我的视觉工作室测试。你能检查一下这个 - alert(JSON.Srigify(list)),请吗? 警报给出 ["changed","SubGroupId-2","GroupId-1"] 这是我所期望的。这就是我的 ajax 调用的外观: var memberGroups = GroupId: list[0], SubGroupId: list[1], Status: list[2] alert(JSON.stringify(list)); $.ajax( url: "/umbraco/Api/OrganisationMemberGroupsDashboardApi/UpdateMemberToGroup", data: memberGroups, type: "POST", contentType: "application/json; charset=utf-8" ) 尝试删除 ContentType。我通常只将它用于特殊类型。我通常使用 -success: function (result) ... 而不是 done。您是否尝试过 [FromForm] 而不是 [FromBody] 或完全删除它? 删除类型成功了,感谢您的宝贵时间!

以上是关于将数组从ajax调用传递给控制器​​,控制器中的数组为空的主要内容,如果未能解决你的问题,请参考以下文章

将数组数组从 Ajax 传递给控制器

如何从ajax将多个json数组传递给控制器​​?

如何使用 Ajax 调用 MVC4 传递两个字符串数组

如何将视图中的数组传递给 ajax 并在 Laravel 5 的控制器中访问?

我可以通过 Ajax 将两个数组传递给控制器​​吗? (文件数组和整数数组)

将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器