1

我有一个绑定到模型的 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 或其他东西进行异步调用......如果它确实如此,我该怎么做?

4

2 回答 2

1

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

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

例如

@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);   
}
于 2012-07-04T05:10:32.300 回答
0

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

  1. 像您所做的那样从客户端更新 html 控件值
  2. 使用$.PostjQuery 将更新后的值发送到 MVC 控制器(创建一个新的控制器来更新模型)
  3. 在控制器操作中更新您的模型

模型更新后,它将反映在您的 UI 上。您的问题是您的模型未更新,因此PaymentViaPost操作将始终从模型中获取旧值

以下链接可能会有所帮助

MVC3 和 jQuery

使用 jQuery 更新模型

于 2012-07-04T06:01:46.120 回答