【问题标题】:passing an array from ajax call to controller, array empty in controller将数组从ajax调用传递给控制器​​,控制器中的数组为空
【发布时间】: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 。

标签: javascript c# ajax asp.net-mvc .net-core


【解决方案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] 或完全删除它?
  • 删除类型成功了,感谢您的宝贵时间!
猜你喜欢
  • 2020-01-18
  • 2015-09-18
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多