我的视图中有12个复选框,当我选择一些项目并按下提交按钮时,formcollection只有两个键[0]“IsSelected”和[1]“播放列表”。
这是我的观点。它不是模型的强类型,而是局部视图。
@using (Html.BeginForm()) {
<p>Tracks</p>
foreach (Sem_App.Models.Track track in ViewBag.Tracks)
{
@Html.CheckBoxFor(m => track.IsSelected)
@track.Title
}
@Html.DropDownList("Playlists", String.Empty)
<input type="submit" value="Add To Playlist" />
}
控制器
[HttpPost]
public ActionResult Search(String criteria, FormCollection collection)
{
}
有什么方法可以解决这个问题吗?或者有更好的方法将更新的ViewBag.Tracks列表传递给控制器吗?因为每个曲目都有一个bool IsSelected Field
答案 0 :(得分:3)
复选框表单项需要唯一的名称/ ID属性才能正确地作为POST ActionResult中的列表。我见过的大多数例子都使用index属性来指定输入元素的名称,如下所示:
@using (Html.BeginForm()) {
<p>Tracks</p>
int index = 0;
foreach (Stackoverflow.Controllers.Track track in ViewBag.Tracks)
{
@Html.CheckBox("tracks[" + index + "].IsSelected", track.IsSelected)
@Html.Hidden("tracks[" + index + "].Title", track.Title)
@track.Title
index++;
}
@Html.DropDownList("Playlists", String.Empty)
<input type="submit" value="Add To Playlist" />
}
然后它会通过这样的POST方法来实现:
[HttpPost]
public ActionResult Search(String criteria, string PlayLists, List<Track> tracks)
{
}