2016-09-25 5 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

И в контроллере, я получаю «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 }] 
    } 
} 

Предполагая, что ваш метод действия принимает параметр типа 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. Но если вы хотите использовать классы javascript ECMA 2015, используйте тот же код из своего вопроса. Он должен работать.

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

Да, это работает для меня. Но, если я хочу иметь js-класс «Controladora» с массивом «Puertas» и передать с JSON этот класс контроллеру? – enriquesroman

Смежные вопросы