我正在尝试为多对多关系构建一个表单,其中团队可以属于任意数量的机构,机构可以拥有任意数量的团队。
我目前的问题与将机构分配给团队有关。这个想法是在团队表单上有一个带有“添加此机构”按钮的选择框,该按钮会触发控制器中的“添加机构”操作。我已将所有机构放入 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 参数(团队和机构)都会映射到接收方法的参数,这就是为什么我将团队放在 objectRouteValues 的形式中,而我希望机构由选择框值:
[HttpPost]
[ValidateAntiForgeryToken]
public string AddInstitution(Team team, Institution institution)
{
return "team: " + team.ID + ", institution: " + institution.ID;
}
此方法中的两个参数均为空。任何人都知道为什么它们没有正确映射到方法签名?
额外的问题:这是您为多对多关系构建表单的首选策略,还是有更好的方法?