JQuery和MVC POST

时间:2012-07-04 04:42:03

标签: jquery asp.net-mvc-3

我有一个绑定到模型的html元素(使用MVC3)

        <label id="total-amount">
             @Html.Encode(@Model.TotalAmount)
        </label>

我正在客户端使用Jquery修改值

        if (!$(this).is(':checked')) {

           var lblTotalAmount = $("#total-amount");
           var totalAmount = nationalPrice + recurPrice;
           lblTotalAmount.text(totalAmount.toFixed(2));

        }

工作正常。 但是当我在我的控制器中发布Model.TotalAmount的值时...我通过JQuery修改的值并不反映......

    [HttpPost]
    [ActionName("Payment")]
    public ActionResult PaymentViaPost(PaymentVM viewModel)
    {
        //still the same value before JQuery modification
        var totalAmount = viewModel.TotalAmount; 

我在这里遗漏了一些东西,比如我需要使用AJAX或其他东西进行异步调用......如果有,我该怎么做?

2 个答案:

答案 0 :(得分:1)

标签中的文字不会发送到服务器,您需要使用某种输入控件。

我建议您使用隐藏控件,让JQuery更新标签和隐藏输入。

e.g。

@Html.HiddenFor( x => x.TotalAmount)
<label id="total-amount">
     @Html.Encode(@Model.TotalAmount)
</label>

if (!$(this).is(':checked')) {
   var lblTotalAmount = $("#total-amount");
   var totalAmount = nationalPrice + recurPrice;
   lblTotalAmount.text(totalAmount.toFixed(2));

   var hiddenInput = $("#TotalAmount");
   hiddenInput.val(totalAmount);   
}

答案 1 :(得分:0)

我相信这可以通过以下方式实现:

  1. 完成后从客户端更新html控件值
  2. 使用jQuery的$.Post将更新后的值发送到MVC控制器(创建新控制器以更新模型)
  3. 在控制器操作中更新模型
  4. 模型更新后,它将反映在您的用户界面上。您的案例中的问题是您的模型未更新,因此PaymentViaPost操作将始终从模型中获取旧值

    以下链接可以提供帮助

    MVC3 and jQuery

    Update model with jQuery