如何将带有JSON的自定义类传递给Controller

时间:2016-09-25 00:01:46

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

我在JS中有这两个类:

class Puerta {
    constructor(nro, tipo) {
        this.nroPuerta = nro;
        this.tipoPuerta = tipo;
    }
}

class Controladora {
    constructor(ip, segundos, puertas) {
        this.ipControladora = ip;
        this.apuertaSegundosControladora = segundos;
        this.listaPuertas = puertas;
    }
}

我有这个代码,正确传递'Controladora',但在'Controladora'类中没有'Puertas'数组的任何元素。

$(document).ready(function (){
    var puertas = [];
    for(var i = 1;i<=3;i++){
        puertas.push(new Puerta(i,"String " + i);
    }
    var controladora = new Controladora("192.168.1.1", 30, puertas);
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '/Controladora/Prueba',
        data: JSON.stringify({ 'Controladora': controladora }),
        success: function () {
        },
        failure: function (response) {
        }
    });
});

1

在Controller中,我得到'Controladora',但listaPuertas为空。

我做错了什么?想念什么?

修改

这是C#中的类:

public class Puerta
{
    public int nroPuerta{ get; set; }
    public string tipoPuerta { get; set; }
}

public class Controladora
{
    public string ipControladora { get; set; }
    public int apuertaSegundosControladora { get; set; }
    public List<Puerta> listaPuertas { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您当前的js代码正在发送ajax数据,如下面的结构

{
    "Controladora": {
        "ipControladora": "",
        "listaPuertas": [{  "nroPuerta":  1 },
                         {   "nroPuerta": 2 },
                         {   "nroPuerta": 3 }]
    }
}

假设您的操作方法正在接受Controladora

类型的参数
[HttpPost]
public ActionResult Prueba(Controladora model)
{
    // to do : return something,
}

要使模型绑定起作用,您应该发送类似这样的内容

为此,您只需发送与Controldaora类结构匹配的数据。无需在json有效负载中指定参数名称。

{
    "ipControladora": "",
    "listaPuertas": [{      "nroPuerta": 1      },
                     {      "nroPuerta": 1      }, 
                     {      "nroPuerta": 1      }]
}

以下代码应该这样做。

var puertas = [];
for (var i = 1; i <= 3; i++) {
    puertas.push({ nroPuerta: 1 });
}
var d = { ipControladora: "192.168.1.1",
                     apuertaSegundosControladora :30,
                     listaPuertas: puertas };


$.ajax({
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: 'POST',
    url: '@Url.Action("Prueba","Controladora")',
    data: JSON.stringify(d),
    success: function () {
    },
    failure: function (response) {
    }
});

我用js对象替换了js类。但是如果想要使用ECMA 2015 javascript类,请使用您问题中的相同代码。它应该工作。

var puertas = [];
for(var i = 1;i<=3;i++){
    puertas.push(new Puerta(i,"Stringy " + i));
}
var d = new Controladora("192.168.1.1", 30, puertas);
$.ajax({
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: 'POST',
    url: '@Url.Action("Prueba","Controladora")',
    data: JSON.stringify(d),
    success: function () {
    },
    failure: function (response) {
    }
});