列表不在POST中从JSON绑定

时间:2018-02-22 01:57:06

标签: javascript jquery asp.net data-binding asp.net-core-mvc

我写了一个接受我的模型的POST请求但是一旦我进入请求,List就返回null。

我已经在线阅读了多个解决方案,从添加[FormBody]到检查我的命名约定,但似乎没有任何工作正常。

在我的脚本中,我创建了一个数组var UserPermissions = new Array();

然后我将数组推送到多个对象:

var permission = {
    UserId: @Model.UserId,
    AppId: @Model.AppId,
    PermissionId: this.value
}
UserPermissions.push(permission);

然后我执行我的Ajax请求:

$.ajax({
    url: '@Url.Action("UpdateUserPermissions")',
    data: JSON.stringify(UserPermissions),
    type: "post",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: false,
    success: function (status) {
      swal("User Permissions have been updated.", { icon: "success" });
    },
    error: function (xhr, ajaxOptions, thrownError) {
      swal("Error updating permissions, please contact support.");
    }
});

我的控制器POST请求看起来像这样:

 public IActionResult UpdateUserPermissions([FromBody]PermissionPartialModel model)
    {
        return View();
    }

在每个[FromBody]PermissionPartialModel model返回null时,它应该返回一个列表。

这是我的模特:

 public class PermissionPartialModel
{
    public int AppId { get; set; }
    public int UserId { get; set; }
    public List<UserPermissionsModel> UserPermissions { get; set; }
}

导致这种情况的原因是什么,以及解决此问题的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

var UserPermissions= {
    UserId: @Model.UserId,
    AppId: @Model.AppId,
    PermissionId: this.value
}
//UserPermissions.push(permission);

$.ajax({
    url: '@Url.Action("UpdateUserPermissions")',
    data: UserPermissions,
    type: "post",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: false,
    success: function (status) {
      swal("User Permissions have been updated.", { icon: "success" });
    },
    error: function (xhr, ajaxOptions, thrownError) {
      swal("Error updating permissions, please contact support.");
    }
});

答案 1 :(得分:0)

您正在从视图发送数组但在控制器中接收对象。您需要将参数类型从对象更改为

public IActionResult UpdateUserPermissions([FromBody]List<PermissionPartialModel> model)
{
   return View();
}

这将映射,但您将获得UserPermissions null。要解决此问题,您需要在PermissionPartialModelpermission对象中进行更改。

权限

var permission = {
        UserId: 2,
        AppId: 2,
        UserPermissions: { PermissionId: 2 }
}
UserPermissions.push(permission);

<强> PermissionPartialModel

 public class PermissionPartialModel
 {
        public int AppId { get; set; }
        public int UserId { get; set; }
        public UserPermissionsModel UserPermissions { get; set; }

 }