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

相關問題