ポストする時に同じ name があった場合、
どのような挙動となるのか確認しました。
※自分自身のメモです。時間も遅いのでわかり辛かったらすみません。。。
次のような Controller と View があるとします。
public class HomeController : Controller { public ActionResult Index() { return View("Index"); } public ActionResult Send(bool a) { return this.Index(); } }
※ submit すると HomeController クラスの Send メソッドが呼ばれます。
@using (Html.BeginForm("Send", "Home", null, FormMethod.Post)) { <input type="checkbox" name="a" value="true" /> <input type="hidden" name="a" value="false" /> <input type="submit" value="送信" /> }
checkbox を チェック した状態で引数 a には true が設定されます。
また、
checkbox を チェック しない状態で引数 a には false が設定されます。
これは、name が複数同じ値が存在した場合、
先に読み込まれた値を元に解決しているようです。
その為、以下のような実装も可能となります。
@using (Html.BeginForm("Send", "Home", null, FormMethod.Post)) { <input type="text" name="a" /> <input type="checkbox" name="a" value="true" /> <input type="hidden" name="a" value="false" /> <input type="submit" value="送信" /> }
type が text の入力値が bool型へ変換できない場合は実行時例外が発生します。
文字列そてい、 "true" および "false" と入力した場合は、
入力した値が bool 型へ変換され引数 a に設定されます。
この事から、上から下へ順に解決されている事が確認できました。