问题描述
谁能建议我在这里需要更改什么?
我从包含“已更改”类的元素中获取类,我获取的类包含我想传递给控制器方法的 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] 或根本不使用任何东西。