我需要一些帮助。我有这两个模型和我将在下面使用它们的方法。
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
}
我试图通过AJAX将数据发布到CreateRole()方法,并使用调试中断检查'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名称和描述密钥,并且PermissionGroups Count为1,但不会填充PermissionGroups中的密钥。
任何人都可以建议我可以传递带有对象列表的JSON对象。
提前致谢。
答案 0 :(得分:1)
您发送的javascript对象不合适。
"PermissionGroups": ["Name": "Group Name", "Description": "Test Desc"]
在您的viewmodel中,PermissionGroups
是PermissionGroupModel
个项目的集合。但你不是这样传递的。上面的代码发送4个字符串项作为PermissionGroups
属性的值。您需要使用{
和}
此外,要在复杂对象上进行模型绑定,您需要使用JSON.stringify
方法将javascript对象转换为json字符串,并在进行ajax调用时指定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")"