【问题标题】:Passing JSON Object and List of Objects to ASP.Net Controller [duplicate]将 JSON 对象和对象列表传递给 ASP.Net 控制器 [重复]
【发布时间】:2016-03-07 02:14:33
【问题描述】:

我需要一些关于以下内容的帮助。我有这 2 个模型以及我将在下文中使用它们的方法。

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 计数为 1,但 PermissionGroups 中的键未填充。

任何人都可以建议我可以通过其中包含对象列表的 JSON 对象的任何方式。

提前致谢。

【问题讨论】:

  • 您没有发送 PermissionGroups 项的 PermissionGroupID 属性,您希望如何填充它?

标签: c# asp.net json ajax asp.net-mvc-4


【解决方案1】:

您发送的 javascript 对象不正确。

 "PermissionGroups": ["Name": "Group Name", "Description": "Test Desc"]

在您的视图模型中,PermissionGroupsPermissionGroupModel 项目的集合。但你不会像这样通过它。上面的代码发送 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: "@Url.Action("CreateRole","BackOffice")"替换url: "/BackOffice/CreateRole"

【讨论】:

  • 谢谢老兄这工作完美无缺!
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多