[英]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.