Null JSON GET ASP.NET MVC

本文关键字:NET MVC ASP GET JSON Null | 更新日期: 2023-09-27 18:06:12

嗨,我有两个控制器方法。我将两个参数从第一个方法传递到第二个方法。插入到数据库中的值是正确的,不是NULL。然而,当有返回Json行显示在网页上,他们出来为空,我不知道为什么?以下是控制器方法:

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

    public JsonResult CalculateAndSaveToDB(string o, string t)
    {
        var data = new
        {
            CalculatedBMI = o,
            CalculatedBMIMeaning = t
        };
        return Json(data, JsonRequestBehavior.AllowGet);
    }

更新

BMICalculationsModel:

 public partial class BMICalculation
{
    public string Id { get; set; }
    public System.DateTime Date { get; set; }
    public Nullable<double> BMICalc { get; set; }
    [Required]
    public double Height { get; set; }
    [Required]
    public double Weight { get; set; }
    public int BMICalculationID { get; set; }
    public virtual AspNetUser AspNetUser { get; set; }
    public string BMIMeaning { get; set; }
    public double CalculateMyBMI(double KG, double Height)
    {
        return KG / (Height * Height);
    }
    public string BMIInfo(double? BMI)
    {
        string BMIInfo = "";
        if (BMI <= 18.5)
        {
            BMIInfo = "Underweight";
        }
        else if (BMI > 18.5 && BMI < 25)
        {
            BMIInfo = "Average";
        }
        else if (BMI > 25)
        {
            BMIInfo = "Overweight";
        }
        return BMIInfo;
    }
}

Null JSON GET ASP.NET MVC

您需要使您的第一个方法返回JsonResult而不是void。第二个CalculateAndSaveToDB返回一个从未使用过的JsonResult。

我绝对不会调用第二个方法CalculateAndSaveToDB,因为它不会将任何内容保存到DB。也许GenerateJsonCalc更合适,或者根本没有方法:

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

我想这样写:

return Json(new
{
    CalculatedBMI = CalculateModel.BMICalc.ToString(),
    CalculatedBMIMeaning = CalculateModel.BMIMeaning.ToString()
 }, JsonRequestBehavior.AllowGet);

将POST方法的返回类型及其最后一行更改为:

public ActionResult CalculateAndSaveToDB(BMICalculation CalculateModel)
{
    //stuff
    return RedirectToAction("CalculateAndSaveToDB", new { o = CalculateModel.BMICalc.ToString(), t = CalculateModel.BMIMeaning.ToString());
}

try return一个动态对象

public  dynamic  CalculateAndSaveToDB(BMICalculation CalculateModel)
{
   ...
   return  CalculateAndSaveToDB(CalculateModel.BMICalc.ToString(), CalculateModel.BMIMeaning.ToString());
}  
public dynamic CalculateAndSaveToDB(string o, string t)
{
    dynamic data = new new ExpandoObject();
    data.CalculatedBMI = o;
    data.CalculatedBMIMeaning = t;

    return  data ;
}