【问题标题】:Controller recieving empty data from Ajax控制器从 Ajax 接收空数据
【发布时间】:2016-10-17 02:12:38
【问题描述】:

我正在尝试使用 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 和其他类型的变量,所以我怀疑我在数据绑定方面做错了什么。

下面我附上了我正在发送的内容和我在另一边收到的内容的图片。

这是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; } 
}

【问题讨论】:

  • 您的FuncionUsuario 模型架构是什么样的?
  • 这不是一个确定的答案,但是有几个类似的问题可以解决数据字符串化/提供适当的contentType 的问题。我肯定会先尝试指定contentType,然后仅在必要时进行字符串化。 stackoverflow.com/questions/10101896/…, stackoverflow.com/questions/14691977/…
  • @Nkosi 感谢您的编辑!我打算这样做,但你打败了我。

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


【解决方案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,
});

【讨论】:

  • 我无法解释为什么,但现在它可以工作了!昨天我太累了,我可能在一些测试中留下了一些未完成的代码,今天我又试了一次,我的工作就像一个魅力。非常感谢。
【解决方案2】:

试试这些:

指定jsonas 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"
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2016-04-15
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多