2012-08-23 9 views
5

我々はMVCで、CheckBoxForvalue="true"checkboxvalue=falsehiddenを生成することがわかっています。どちらの入力コントロールも同じ名前を共有します。JSONデータにフォームのチェックボックスをシリアライズする方法

ボックスがチェックされていないと、フォームが誤った値をPOSTすることができるため、非常に妥当です。また、モデルバインダーは、チェックボックスがtrueを返すときに隠れた入力を無視します。

しかし、フォームデータをJSON形式のWebAPIコントローラに送信するために、フォーム送信イベントをオーバーライドしました。

フォームデータをシリアル化するとき、チェックボックスと非表示の間の関係を正しく解析するメカニズムはありません。したがって、チェックを外すとfalseが返されます。これは問題ありません。しかしチェックされると、serializeArray()関数はすべてinputを通過し、2つの値が同じ名前になるため、trueの代わりに{true, false}を返します。

質問は次のとおりです。それを修正する最も良い方法は何ですか?

+0

[ASP.Net MVC 4のWebAPIは、チェックボックスを正しくバインドしませんか?](http://stackoverflow.com/questions/11996285/asp-net-mvc-4s-webapi-does-not-bind-チェックボックス - 正しく) –

答えて

1

この問題に対する私の解決策は、入力タイプ= "checkbox"/>という単一の<タグをレンダリングする独自のHtmlHelperメソッドを作成することでした。他の解決策はあまりにもハッキリすぎるようでした。

dotPeekまたは.NET Reflectorを使用して、Microsoft TeamがHtmlHelper.CheckboxForメソッドをどのように作成したかを調べることができます。

"bool"パラメータに一致するパラメータがコントローラに送信されていない場合(チェックされていないチェックボックスは値を送信しない)、MVCアクションパラメータが例外をスローしないように、2タグアプローチが採用されました。

関連する問題