C# 空JSON获取ASP.NET MVC

C# 空JSON获取ASP.NET MVC,c#,.net,json,asp.net-mvc,C#,.net,Json,Asp.net Mvc,嗨,我有两种控制器方法。我将两个参数从第一个方法传递到第二个方法。插入到数据库的值正确且不为空。然而,当返回Json行中的网页上显示返回时,它们将显示为null,我不知道为什么?以下是控制器方法: [HttpPost] public void CalculateAndSaveToDB(BMICalculation CalculateModel) { if (ModelState.IsValid) { CalculateM

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

  [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);
    }
更新

BMI计算模型:

 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;
    }

}
公共部分类计算
{
公共字符串Id{get;set;}
public System.DateTime日期{get;set;}
公共可为空的BMICalc{get;set;}
[必需]
公共双倍高度{get;set;}
[必需]
公共双权重{get;set;}
公共计算ID{get;set;}
公共虚拟AspNetUser AspNetUser{get;set;}
公共字符串{get;set;}
公共双倍计算YBMI(双倍千克,双倍高度)
{
返回KG/(高度*高度);
}
公共字符串BMIInfo(双精度?BMI)
{
字符串bminfo=“”;
如果(体重指数18.5&&BMI<25)
{
bminfo=“平均”;
}
如果体重指数>25,则为其他情况
{
bminfo=“超重”;
}
返回BMI信息;
}
}

尝试返回动态对象

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 ;
}

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

我绝对不会调用第二个方法
CalculateAndSaveToDB
,因为它不会将任何内容保存到数据库中。可能
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());
}

忘记返回<代码>返回CalculateAndSaveToDB(CalculateModel.BMICalc.ToString(),CalculateModel.bmiMeansing.ToString())返回什么数据类型?它的void at momentBMICalc是double,bmi的意思是stringI建议重命名第二个方法,因为它除了构建
JSON
并返回它之外,什么都不做。将其命名为与第一个方法相同是令人困惑的。仍然为null。不幸的是,您也可以发布bmiculation类的代码吗?您是否使用Ajax调用这些方法?在这种情况下,我是否需要HttpPost和HttPGet?我也添加了[HttPGet],它表示加载资源失败:服务器响应状态为404(未找到)这应该是一个
POST
还是
GET
方法?因为它也从表单中获取数据,我想这应该是其中之一
POST
可以返回一个值。