0

チェックボックス ヘルパー (かみそりの構文) で非常に奇妙な動作に苦しんでいます。一連の手順は次のとおりです。

Index ActionResult で、Web に表示される ViewModel を作成します。

var viewModel = new MyViewModel
{ 
    Field1 = service.GetField(),
    Field2 = otherService.GetField()
    Field3 = otherService.Class.BooleanField
};

Field3 は次のように「レンダリング」されます。

@Html.CheckBoxFor(model => model.Field3, new { @class = "something" })

ページが読み込まれると、チェックされた状態のチェックボックスが表示されます(ブール値がtrueの場合、確かに)。

ページが読み込まれると、「OnReady」Jquery イベントが起動されます。このメソッドでは、ViewModel から受け取ったパラメーターに基づいて価格を計算する ActionResult を (AJAX 経由で) 呼び出します。

理由はわかりませんが、値が true であるのに Field3 パラメータが「false」であり、チェックボックスがオンの状態になっています。その後、この計算を開始するコントロールを変更すると、メソッドを受け取る ViewModel にはこの Field3 が含まれますが、正しい値 (true) になります。

この値との相互作用の可能性を探していましたが、何も見つかりませんでした。前述のように、AJAX 呼び出しが行われたときにフィールドが正しくチェックされます。

ありがとう!

Ps: FireBug で取得した HTML:

<input id="Field_Field" class="canRequestCalculation" type="checkbox" value="true" name="Field.Field" data-val-required="Mandatory field" data-val="true" checked="checked">
<input type="hidden" value="false" name="Field.Field">

ご覧のとおり、状態はチェックされていますが、非表示の値は false です。

AJAX jQuery 呼び出しによる情報取得:

$.ajax({
    type: "POST",
    url: "/Controller/PerformCalculation",
    data: $("#form").serialize(),
    success: function (data) {
        //UI Work
    },
    beforeSend: function (data) {
        //UI Work
    }
});

先ほど言ったように、2 回目に呼び出しを実行すると、値が true でフォームが正しく送信されます。FiddleHttpFoxなどのソフトウェアを使用して HTTP 呼び出しを検査すると、ブラウザーではチェックがオンになっていますが、「Field.Field」は false です。

4

1 に答える 1

0

jQueryでチェックボックスの状態をどのように判断していますか? 現在、 $("#checkboxId").attr("checked") を使用して値を取得しています。

于 2012-05-31T17:18:42.893 に答える