チェックボックスからコントローラーに値を投稿するという非常に奇妙なケースがありますが、チェックされていてもそうではありません!
私のビューモデルの一部:
public class BeslutIStortViewDTO
{
public BeslutIStortDTO BeslutIStort { get; set; }
public BeslutIStortListorDTO SelectListor { get; set; }
}
public class BeslutIStortDTO
{
public int id { get; set; }
public bool Ok { get; set; }
... other stuff
}
私の見解の一部:
<div id="colOk" class="kolumn_header">
@Html.LabelFor(model => model.BeslutIStort.Ok)
@Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5 })
</div>
コントローラーに渡される文字列で、ボックスがチェックされていない場合、すべて問題ないように見えます。
BeslutIStort.Ok=false
しかし!私がそれをチェックすると:
BeslutIStort.Ok=&BeslutIStort.Ok=false
文字列内で 2 回、最初は値がなく、もう一方はfalse
であるため、どちらも間違っています。もちろん、私は 1 つだけを期待しますtrue
。
もう 1 つの興味深い発見は、実際にレンダリングされた html では、チェックボックスが次のようになっていることです。
<input class="rensa" id="BeslutIStort_Ok" name="BeslutIStort.Ok" tabindex="5" type="checkbox" value="true" /><input name="BeslutIStort.Ok" type="hidden" value="false" />
隠しフィールドあり!
サーバーに値を投稿するときは、ajax を使用します。データ パラメーターは次のように定義されます。
data: $("#BisData").serialize(),
誰かがこれに光を当てるのを手伝ってくれて、コントローラーに「真実」を与えるのを手伝ってくれることを願っています:-)
=== 解決済み === 結局のところ、私は次のようなJavaScriptを持っていました:
$(".rensa").val("");
これにより、チェックボックスが機能しなくなりました。私はこれを追加しました:
$(".rensaCheckbox").attr("チェック済み", false);
チェックボックスの場合、これで機能します。