MVC控制器表单提交和Ajax调用之间的不同行为

时间:2017-08-24 15:02:42

标签: c# asp.net ajax asp.net-mvc web

我对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,并以这种方式请求数据。我已经更新了控制器的代码,以便更好地显示我所说的内容。

0 个答案:

没有答案