将数组从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 并在 Laravel 5 的控制器中访问?