ASP*_*450 0 c# asp.net asp.net-mvc json
嗨,我有这种控制器方法
[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();
}
var data = new
{
CalculatedBMI = CalculateModel.BMICalc,
CalculatedBMIMeaning = CalculateModel.BMIMeaning
};
return Json(data, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
这是我的JS功能:
$('#good').click(function () {
var request = new BMICalculation();
$.ajax({
url: "CalculateAndSaveToDB",
dataType: 'json',
contentType: "application/json",
type: "POST",
data: JSON.stringify(request), //Ahhh, much better
success: function (response) {
$("#result").text(response.result);
},
});
ShowBMI();
});
function ShowBMI() {
$.ajax({
type: "GET",
dataType: "json",
contentType: "application/json",
url: "CalculateAndSaveToDB",
success: function (data) {
var div = $('#ajaxDiv');
div.html("<br/> " + "<b>" + "Your BMI Calculations: " + "</b>");
printBMI(div, data);
}
});
};
Run Code Online (Sandbox Code Playgroud)
当执行ShowBMI()时,Chrome说GET http://localhost:50279/BMICalculations/CalculateAndSaveToDB/0 404 (Not Found)
POST会在保存到数据库等时起作用,但GET不会?这有什么理由吗?正如您所看到的,每个JS函数中的URL都完全相同,所以我不确定为什么它第二次发现一次坚果?
更新:
分离逻辑后,网页上显示的值均为空.请参阅下面的代码更改
[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();
}
CalculateAndSaveToDB(CalculateModel.BMICalc.ToString(), CalculateModel.BMIMeaning.ToString());
return Json("", JsonRequestBehavior.AllowGet);
}
[HttpGet]
public JsonResult CalculateAndSaveToDB(string o, string t)
{
var data = new
{
CalculatedBMI = o,
CalculatedBMIMeaning = t
};
return Json(data, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
那是因为你已经应用了[HttpPost]属性:)该属性使该动作仅用于POSTing而不是GETing.您应该将与GETing相关的逻辑移动到具有相同名称但没有[HttpPost]属性的操作,并保留用于在标记有[HttpPost]属性的操作中处理POSTed数据的逻辑.
请注意,在将逻辑分成不同的方法时,您应该重新考虑名称,否则名称会产生误导.
关于你的更新
我将POST请求处理操作(您的操作标记为HttpPost)返回一个ActionResult,这实际上意味着成功处理您的请求后的POST请求处理操作会将用户重定向到确认页面或其他地方.哪里最好真的:)
试着在逻辑上接近它,在发布数据时会有什么自然的事件链?您作为用户期望发生什么?
关于你的GET动作,那是因为你没有发送参数o和t,然后你会立即返回.由于逻辑中的这些参数没有任何反应,并且未另行指定,因此它们将包含null,这是string类型变量的默认值.您是不打算从数据库中检索数据,而不是只提供两个参数才能立即返回它们?