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. jQuery を使用$.Postして、更新された値を MVC コントローラーに送信します (新しいコントローラーを作成してモデルを更新します)。
  3. コントローラー アクション内でモデルを更新する

モデルが更新されると、UI に反映されます。あなたの場合の問題は、モデルが更新されていないため、PaymentViaPostアクションは常にモデルから古い値をフェッチすることです

次のリンクが役立ちます

MVC3 と jQuery

jQuery でモデルを更新する

于 2012-07-04T06:01:46.120 に答える