2016-09-25 67 views
0

我有这样的两个类中JS:如何通过自定义类使用JSON到控制器

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”正确,但没有PUERTAS”的阵列的任何元件'在班级'Controladora'中。

$(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为空。

我在做什么错?遗漏了什么?

EDIT

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

显示控制器方法(而不是图像的链接),模型中的问题 –

+0

构造的'Controladora'只需要两个参数结合,但你传递三个,并使用'this.listaPuertas = []'哪个初始化空数组 – Fabio

+0

我怀疑你序列化为JSON的方式。我认为它需要像这样:'data:JSON.stringify(controladora),'。因为你的JavaScript类需要成功序列化到C#实例。 – Fabio

回答

1

您当前的js代码在发送像下面结构

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

的AJAX数据假设你的动作方法是接受一参数类型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) { 
    } 
}); 
+0

是的,它适用于我。但是,如果我想要一个带'Puertas'数组的js类'Controladora'并通过JSON传递给控制器​​? – enriquesroman

相关问题