チェックボックス ヘルパー (かみそりの構文) で非常に奇妙な動作に苦しんでいます。一連の手順は次のとおりです。
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 でフォームが正しく送信されます。FiddleやHttpFoxなどのソフトウェアを使用して HTTP 呼び出しを検査すると、ブラウザーではチェックがオンになっていますが、「Field.Field」は false です。