MVC 3 - 为什么我没有在FormCollection中获取复选框值?

时间:2012-03-13 00:23:37

标签: asp.net-mvc-3 checkbox checkboxfor

我的视图中有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

1 个答案:

答案 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)
{

}