チームが任意の数の機関に所属でき、機関が任意の数のチームを保持できる、多対多の関係のフォームを構築しようとしています。
私の現在の問題は、機関をチームに割り当てることに関連しています。アイデアは、コントローラーで「addInstitution」アクションをトリガーする「この機関を追加」ボタンを備えた選択ボックスをチームフォームに配置することです。すべての機関を ViewBag SelectList オブジェクトに入れました。これは、現在割り当てられているすべての機関とともに、Team/Edit アクションに正しく表示されます。
@using (Html.BeginForm("AddInstitution", "Team", new { team = Model.ID }, FormMethod.Post))
{
@Html.AntiForgeryToken()
<div>
Add to institution:
</div>
<div>
@Html.DropDownList("institution", (SelectList)ViewBag.Institutions)
</div>
<div>
<ul>
@foreach (var item in Model.Institutions)
{
<li>@item.InstitutionName</li>
}
</ul>
</div>
<div>
<input type="submit" value="Add" />
</div>
}
この情報を表示するとうまくいきます。ただし、GET または POST パラメーター (チームと機関) は受信メソッドのパラメーターにマップされるという印象を受けました。選択ボックスの値:
[HttpPost]
[ValidateAntiForgeryToken]
public string AddInstitution(Team team, Institution institution)
{
return "team: " + team.ID + ", institution: " + institution.ID;
}
このメソッドのパラメーターは両方とも null です。メソッド署名に正しくマップされていない理由を知っている人はいますか?
おまけの質問: これは多対多の関係のフォームを構築するためのあなたの好みの戦略ですか、それとももっと良い方法はありますか?