如何将JSON对象发送到Controller JsonResult方法

时间:2019-03-13 13:33:20

标签: javascript c# asp.net-mvc

我需要传递一个可以包含许多元素的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的元素?

2 个答案:

答案 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)

请记住,在这种情况下,可能是不同的上下文。