[英]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);
}
如果我理解的正确,那么当您单击“提交”按钮时,您实际上是在执行两个请求,彼此之间并不知道:
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.