控制器从Ajax接收空数据

时间:2016-06-15 19:37:30

标签: javascript c# jquery ajax asp.net-mvc

我尝试使用ajax将视图中的集合发送到控制器。首先,我在javascript数组中完成数据,然后尝试将其传递给服务器:

    var funciones = $("#funcionesUsuario").data("kendoGrid").dataSource.data();
    var func = [];

    for (var i = 0; i < funciones.length; i++) {
        func.push({
            "Estado": 1,
            "FechaAlta": null,
            "UsuarioAlta": null,
            "FechaModificacion": null,
            "UsuarioModificacion": null,
            "BitConcilia": funciones[i].BitConcilia,
            "BitLectura": funciones[i].BitLectura,
            "BitSupervisa": funciones[i].BitSupervisa,
            "ConciliacionId": funciones[i].ConciliacionId,
            "UsuarioId": funciones[i].UsuarioId
        })
    }

    $.post(url, { funcionesUsuario: func })
        .done(function (data) {
        alert("good job");
    });

然后,由于我发送了2个对象的数据,因此我的参数是所述对象的IEnumerable:

public void ActualizarFuncionesUsuario(IEnumerable<FuncionUsuario> funcionesUsuario)
    {
        //do something
    }

我的问题是控制器收到2个对象,正如我在funcionesUsuario.count中看到的那样,但它们都是空的。

我尝试成功发送int,bool和其他类型的变量,所以我怀疑我在数据绑定方面做错了。

下面我附上了我发送的内容以及我在另一方收到的内容。

Picture of the js function Picture of the controller

这是FuncionUsuario模型:`

public class FuncionUsuario : AuditableEntity { 
    public int ConciliacionId { get; set; } 
    public int UsuarioId { get; set; } 
    public bool BitLectura { get; set; } 
    public bool BitConcilia { get; set; } 
    public bool BitSupervisa { get; set; } 
    public virtual Conciliacion Conciliacion { get; set; } 
    [Display(ResourceType = typeof(Global), Name = "Descripcion")] 
    [NotMapped] 
    public string Descripcion { get; set; } 
}

2 个答案:

答案 0 :(得分:1)

试试这些:

指定json as the dataType

$.post(url, { funcionesUsuario: func })
  .done(function (data) {
    alert("good job");
}, 'json');

改为使用$.ajaxdocs

$.ajax({
  url: url,
  data: JSON.stringify(func),
  contentType: "application/json",
  type: "POST"
});

答案 1 :(得分:1)

首先将数组构造为java脚本对象

var funciones = $("#funcionesUsuario").data("kendoGrid").dataSource.data();
var func = [];

for (var i = 0; i < funciones.length; i++) {
    func.push({
        Estado: 1,
        FechaAlta: null,
        UsuarioAlta: null,
        FechaModificacion: null,
        UsuarioModificacion: null,
        BitConcilia: funciones[i].BitConcilia,
        BitLectura: funciones[i].BitLectura,
        BitSupervisa: funciones[i].BitSupervisa,
        ConciliacionId: funciones[i].ConciliacionId,
        UsuarioId: funciones[i].UsuarioId
    })
}

接下来,正确地对它们进行字符串化

var payload = JSON.stringify(func);

然后将其发布为JSON

$.ajax({
  url: url,
  type: "POST",
  contentType: "application/json",
  dataType: 'json'
  data: payload,
});