我試圖建立一個多對多關係的表單,其中團隊可以屬於任何數量的機構,並且機構可以容納任意數量的團隊。GET和POST值未正確映射到方法簽名
我目前的問題與分配一個機構到一個團隊有關。這個想法是在團隊表單上有一個「添加此機構」按鈕的選擇框,這會在控制器中觸發一個「addInstitution」動作。我已經把所有機構成ViewBag的SelectList對象,這是正確顯示在隊伍/編輯動作,與所有當前分配機構一起:
@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;
}
此方法中的兩個參數都爲null。任何人都知道他們爲什麼沒有正確映射到方法簽名?
紅利問題:這是您建立多對多關係表單的首選策略,還是有更好的方法?
我發現如果在方法簽名中用「int」替換對象標識符,它實際上可以工作。這意味着我可以在dbcontext中找到對象,並以這種方式更新它們。但是它不應該能夠從給定簽名的ID實例化對象嗎? – 2013-05-10 16:45:04
我認爲你不能在你使用它的方式在相同的視圖上處理兩個模型 – 2013-05-10 16:45:57
我只將一個模型分配給視圖,並將一個SelectList分配給ViewBag。 – 2013-05-10 16:54:40