我对MVC和Web开发都很陌生,所以请耐心等待。
在我的网络应用程序中,我试图通过Ajax请求调用控制器操作,因为我只想刷新页面中的局部视图而不是整个页面。一切正常(除非部分视图返回错误的值,否则返回部分视图而不刷新主视图)。经过一些调试后,我发现错误与控制器操作中的Request语句有关。当正常表单提交调用控制器操作时,请求能够获取用户输入值,但不能在我使用Ajax请求调用控制器时;它们只返回空值。
请参阅下面的示例,它是我所面临的简化版本。使用Ajax时,由于解析命令在空值上失败,总计最终为0。
控制器:
[HttpPost]
public ActionResult Calculate() {
ViewBag.Total = 0;
for(int i = 1; i < 10; i++) { // max number of Frames that users can add is 10
string FrameNumber = i.ToString;
try {
string rawValue1 = Request["input1_Frame" + FrameNumber];
string rawValue2 = Request["input2_Frame" + FrameNumber];
decimal Value1 = decimal.Parse(rawValue1);
decimal Value2 = decimal.Parse(rawValue2);
ViewBag.Total += Value1 + Value2;
} catch {
break;
}
return PartialView("Banner");
}
JQuery的:
$("#calculate").on("click", function () {
$.ajax({
cache: false,
dataType: 'text',
type: "POST",
url: "/Home/Calculate",
success: function (data) {
$(".banner").html(data);
},
error: function () {
alert("Something went wrong in the controller");
}
});
return false;
})
查看:
<div class="banner"></div>
<input name="input1" type="text">
<input name="input2" type="text">
<button id="calculate">Calculate Total</button>
部分视图
<div>
Total:
<span id="totalValue">@ViewBag.Total</span>
</div>
编辑:所以只是为了澄清我为什么不将这些值作为Ajax参数传递,因为在我的实际视图中,输入的数量是使用JQuery动态生成的。例如,我有一个包含15个输入的帧,但是用户可以选择添加其他帧 - 因此总共会有30,45,60,......或更多输入。我不确定如何以这种方式处理Ajax参数,因此对于每个帧我循环15次,每次递增输入ID,并以这种方式请求数据。我已经更新了控制器的代码,以便更好地显示我所说的内容。