1

我的视图中有 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 列表传递给控制器​​?因为我为每个轨道都有一个布尔 IsSelected 字段

4

1 回答 1

3

复选框表单项需要唯一的名称/ID 属性才能作为 POST ActionResult 中的列表正确通过。我见过的大多数示例都使用索引属性来分配输入元素的名称,如下所示:

@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)
{

}
于 2012-03-13T00:56:16.307 回答