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

问题描述

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

我从包含“已更改”类的元素中获取类,我获取的类包含我想传递给控制器​​方法的 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,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
}

跨度是动态创建的并添加到树视图中。当它们被拖放时,所有类都被删除,然后将“更改”类与 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));

解决方法

此变体已使用 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","Status":"changed"}

你可以把代码放在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] 或根本不使用任何东西。