我需要传递一个可以包含许多元素的JSON对象,我使用以下代码进行了尝试:
var app = new Vue({
el: '#crearMetaCompuesta',
data: {
inputmin: 0,
inputmax: 0,
inputres: 0,
rangos_creados: [{
min: 1,
max: 2,
result: 3
}]
},
methods: {
additem: function() {
let nuevoItem = {
min: this.inputmin,
max: this.inputmax,
result: this.inputres,
}
this.rangos_creados.push(nuevoItem);
},
guardarMetaCompuesta: function() {
console.log(JSON.stringify(this.rangos_creados));
axios.post('@Url.Action("GuardarMetaCompuesta")', {
msg: JSON.stringify(app.rangos_creados),
id: 7
}, {
headers: {
'contentType': 'application/json; charset=utf-8'
}
}).then(function(response) {
alert(response);
console.log("--------->" + JSON.stringify(app.rangos_creados));
})
.catch(function(e) {
console.log("---------> |" + e);
});
}
}
})
JSONResult方法:
public class MetasCompuestasClass{
public string min { get; set; }
public string max { get; set; }
public string result { get; set; }
}
public JsonResult GuardarMetaCompuesta(MetasCompuestasClass msg, int id) {
//here I put a breakpoint but the variable arrives null
var x = 1;
return Json(new { result = false, message = msg }, JsonRequestBehavior.AllowGet);
}
但是msg
变量始终为null。
我应该如何发送对象或应该放置什么“标题”,以使变量不为null并可以保存类型MetasCompuestasClass
的元素?
答案 0 :(得分:2)
看起来您的rangos_creados
对象是一个数组,并且您期望Action中有一个对象。
尝试使用Action签名,如下所示:
public JsonResult GuardarMetaCompuesta(List<MetasCompuestasClass> msg, int id) {
或者,如果您不是只想将一个项目传递给api操作,就不是要创建一个数组,请将rangos_creados
声明更改为一个对象,然后映射nuevoItem
属性对其进行更改,或仅使用值更新rangos_creados
而不是使用nuevoItem,并且不再将其推入集合中。
但这取决于您要执行的操作。
答案 1 :(得分:0)
您似乎正在发送应用。而不是此。
JSON.stringify(app.rangos_creados)
与JSON.stringify(this.rangos_creados)
请记住,在这种情况下,此可能是不同的上下文。