我有这段代码:
[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()代码但现在我不明白&#39;然后更改您的代码,以便使用序列化的表单&#39;
执行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);
}
答案 0 :(得分:0)
如果我理解你正确,当你点击提交按钮时,你实际上是在执行两个请求,而不是彼此不知道:
string
,并且由于您未向其传递任何数据,因此它将返回null。同样,如果我理解正确,那么您希望实现的方案是,在POST表单时,需要使用处理结果返回Json有效负载。 如果这是正确的,那么您可能想要做的事情是让您的Create操作返回Json,然后更改您的代码,以便使用序列化的形式执行Ajax POST。然后在您的Ajax中{{1处理程序处理你得到的结果,就像你现在正在做的那样。我希望我的意图很明确,否则请求澄清。 :)
答案 1 :(得分:0)
您必须将所需参数传递给控制器中的方法...
你应该尝试这样的事情......
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 () {
}
});
}
答案 2 :(得分:0)
使用
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(BMICalculation CalculateBMI)
{
if (ModelState.IsValid)
{
return Json(obj, JsonRequestBehavior.AllowGet);
}
else
{
return View();
}
}
您可以使用ActionResult获取该方法并使用Json Obejct返回