CheckBoxFor が追加の入力タグをレンダリングするのはなぜですか? また、FormCollection を使用して値を取得するにはどうすればよいでしょうか? 質問する

CheckBoxFor が追加の入力タグをレンダリングするのはなぜですか? また、FormCollection を使用して値を取得するにはどうすればよいでしょうか? 質問する

私の ASP.NET MVC アプリでは、次のコードを使用してチェックボックスをレンダリングしています。

<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>

さて、これがレンダリングされることがわかります両方チェックボックスの入力タグと隠し入力タグ。問題は、FormCollection を使用してチェックボックスから値を取得しようとするときに発生します。

FormValues["ReceiveRSVPNotifications"]

値「true,false」を取得します。レンダリングされた HTML を見ると、次のことがわかります。

 <input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
 <input name="ReceiveRSVPNotifications" value="false" type="hidden">

したがって、FormValues コレクションは、同じ名前を持つこれら 2 つの値を結合しているように見えます。

何か案は?

ベストアンサー1

こちらをご覧ください:

http://forums.asp.net/t/1314753.aspx

これはバグではなく、実際には Ruby on Rails と MonoRail の両方が使用するアプローチと同じです。

チェックボックス付きのフォームを送信すると、チェックボックスがオンになっている場合にのみ値が送信されます。そのため、チェックボックスをオフのままにしておくと、多くの場合は false を送信する必要が生じますが、サーバーには何も送信されません。非表示の入力はチェックボックスと同じ名前であるため、チェックボックスがオフになっていると、サーバーには 'false' が送信されます。

チェックボックスがオンになっている場合、ModelBinderは自動的に「true,false」から「true」を抽出します。

おすすめ記事