5

MVC では、 a が aでaCheckBoxForを生成し、 aでa を生成することがわかっています。両方の入力コントロールが同じ名前を共有します。checkboxvalue="true"hiddenvalue=false

ボックスがチェックされていない場合、フォームは偽の値を POST できるため、非常に合理的です。チェックボックスが true を返すと、モデル バインダーは非表示の入力を無視します。

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

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

問題は、それを修正する最善の方法は何ですか?

4

1 に答える 1

1

この問題に対する私の解決策は、単一の <input type="checkbox" /> タグをレンダリングする独自の HtmlHelper メソッドを作成することでした。他のソリューションはハックしすぎたようです。

dotPeek または .NET Reflector を使用して、Microsoft チームがどのように HtmlHelper.CheckboxFor メソッドを作成したかを調べることができます。そのタスクを達成するのに助けが必要な場合。

「bool」パラメーターに一致するパラメーターがコントローラーに送信されなかった場合に、MVC アクションパラメーターが例外をスローするのを防ぐために、2 タグア​​プローチが採用されました (チェックボックスがオフの場合、値は送信されません)。

于 2012-09-07T02:18:37.283 に答える