C# 空JSON获取ASP.NET MVC
嗨,我有两种控制器方法。我将两个参数从第一个方法传递到第二个方法。插入到数据库的值正确且不为空。然而,当返回Json行中的网页上显示返回时,它们将显示为null,我不知道为什么?以下是控制器方法: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
[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
可以返回一个值。