我在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) {
}
});
});
在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; }
}
答案 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) {
}
});