将JSON对象和对象列表传递给ASP.Net控制器
我需要以下帮助。我有这两个模型和我将在以下使用它们的方法。将JSON对象和对象列表传递给ASP.Net控制器
public class RoleModel
{
public string Name { get; set; }
public string Description { get; set; }
public List<PermissionGroupModel> PermissionGroups { get; set; }
}
public class PermissionGroupModel
{
public int PermissionGroupID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
[HttpPost]
public bool CreateRole(RoleModel r){
//code goes here
}
我试图将数据发布到CREATEROLE()通过AJAX方法以及使用调试中断,以检查“R”参数来查看是否得到填充模型。这是我用来测试它的AJAX调用。
$.ajax({
type: "POST",
url: "/BackOffice/CreateRole",
data: {"Name": "Test Name", "Description": "Test Desc", "PermissionGroups": ["Name": "Group Name", "Description": "Test Desc"]},
success: function (data) {},
complete: function (data) {}
});
当提出请求并检查visual studio中的参数时。 RoleModel Name和Description Keys已填充,PermissionGroups Count是1,但PermissionGroups中的密钥未被填充。
任何人都可以提出任何方式,我可以通过一个JSON对象的对象列表中的任何方式。
在此先感谢。
您发送的JavaScript对象不正确。
"PermissionGroups": ["Name": "Group Name", "Description": "Test Desc"]
在您的视图模型,PermissionGroups
是PermissionGroupModel
项目的集合。但是你没有像这样传递它。以上代码将发送4个字符串项目作为PermissionGroups
属性的值。你需要用集合中的每个项目与{
和}
此外,对于模型绑定复杂对象的情况发生,你需要使用JSON.stringify
方法你的JavaScript对象转换为JSON字符串,并指定contentType
属性使得当阿贾克斯呼吁。 contentType
属性值应该是"application/json"
contentType
属性告诉服务器我们发送的数据是Json格式。
var d = {
"Name": "Test Name", "Description": "Test Desc",
"PermissionGroups": [{ "Name": "Group Name", "Description": "Test Desc" }]
};
$.ajax({
type: "POST",
url: "/BackOffice/CreateRole",
contentType: "application/json",
data: JSON.stringify(d) ,
success: function (data) { console.log(data); },
complete: function (data) {}
});
此外,使用Url.Action帮助器方法来构建动作方法的url是一个好主意。
所以更换url: "/BackOffice/CreateRole"
与url: "@Url.Action("CreateRole","BackOffice")"
谢谢老兄,这工作完美无瑕! –
你不发送的PermissionGroups项目PermissionGroupID财产,你怎么能指望它会被填充? – Vi100