簡體   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