繁体   English   中英

在ASP.NET MVC中将模型数据传递给JSON(返回null)

[英]Passing Model Data to JSON in ASP.NET MVC (returning null)

我有以下代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(BMICalculation CalculateBMI)
    {
        if (ModelState.IsValid)
        {
            CalculateBMI.Id = User.Identity.GetUserId();
            CalculateBMI.Date = System.DateTime.Now;
            CalculateBMI.BMICalc = CalculateBMI.CalculateMyBMI(CalculateBMI.Weight, CalculateBMI.Height);
            CalculateBMI.BMIMeaning = CalculateBMI.BMIInfo(CalculateBMI.BMICalc);
            ShowBMI(CalculateBMI.ToString());
            db.BMICalculations.Add(CalculateBMI);
            db.SaveChanges();
        }
        return View();
    }

    public JsonResult ShowBMI(string BMICalculation){
        BMICalculation BMI = new BMICalculation();
        var data = new
        {
            BMICalculation
        };
        return Json(data, JsonRequestBehavior.AllowGet);
    }

我希望将BMI计算从Create(BMICalculation CalculateBMI)方法传递到ShowBMI方法,以便可以将其作为Json值传递到我的网页。

javascript函数由“提交”按钮(也处理表单)调用:

  <button type="submit" id="submit" onclick="ShowBMI();"> <span class="glyphicon glyphicon-floppy-save"></span></button>

我的JS是

<script type="text/javascript">
    $(function ShowBMI() {
        $.getJSON('/BMICalculations/ShowBMI', function (data) {
            alert(data.BMICalculation);
        });
    });

</script>

当我单击提交按钮时,即使我的网页文本框中有值,也会出现警告,提示您为空。 在我的控制器中是否可以解决此问题?

更新1-所以我已经更改了我的Create()代码,但现在我不明白',然后更改了代码,以便您使用序列化表单执行Ajax POST'

    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Create(BMICalculation CalculateBMI)
    {
        if (ModelState.IsValid)
        {
            CalculateBMI.Id = User.Identity.GetUserId();
            CalculateBMI.Date = System.DateTime.Now;
            CalculateBMI.BMICalc = CalculateBMI.CalculateMyBMI(CalculateBMI.Weight, CalculateBMI.Height);
            CalculateBMI.BMIMeaning = CalculateBMI.BMIInfo(CalculateBMI.BMICalc);
            db.BMICalculations.Add(CalculateBMI);
            db.SaveChanges();
        }

        var data = new
        {
            BMICalculation = CalculateBMI.BMICalc,
            BMIInfo = CalculateBMI.BMIMeaning
        };

        return Json(data, JsonRequestBehavior.AllowGet);
    }

如果我理解的正确,那么当您单击“提交”按钮时,您实际上是在执行两个请求,彼此之间并不知道:

  • 一个常规的表单帖子已经过处理,并随视图一起返回。
  • 一个Ajax GET请求,该请求从控制器上的ShowBMI获取一些数据。 该操作需要一个string并且由于您没有传递任何数据,因此它返回null。

再次,如果我对您的理解正确,那么您要实现的方案是,在您发布表单时,您希望将Json有效负载与处理后的结果一起返回。 如果这是正确的,那么您可能要执行的操作是让Json返回Json,然后更改您的代码以进行序列化表单的Ajax POST,然后在Ajax success处理程序中处理结果你回来了,就像你现在在做。 我希望我的意图是明确的,否则,请澄清。 :)

您必须将所需的参数传递给控制器​​中的方法...

您应该尝试这样的事情。

 function ShowBMI() {


                    $.ajax({

                        url: "@Url.Action("Create", "Your Controller")",
                        data: {
                            'CalculateBMI': your Data
                        },
                        dataType: 'json',
                        type: 'POST',
                        success: function (response) {
                            try {

                              alert(response.BMICalculation);

                            }
                            catch (error) {

                            }
                        },
                        error: function () {

                        }
                    });
                   }

用于

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(BMICalculation CalculateBMI)
    {
        if (ModelState.IsValid)
        {
           return Json(obj, JsonRequestBehavior.AllowGet);
        }
        else
        {
           return View();
        }
    }

您可以使用ActionResult获取该方法,并与Json Obejct一起返回

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM