MVC 3 - Почему я не получаю значения флажков в FormCollection? - PullRequest
1 голос
/ 13 марта 2012

У меня есть 12 флажков в моем представлении, и когда я выбираю некоторые из элементов и нажимаю кнопку отправки, у коллекции форм есть только две клавиши [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 в контроллер? так как у меня есть поле boS IsSelected для каждой дорожки

1 Ответ

3 голосов
/ 13 марта 2012

Элементы формы флажка нуждаются в уникальных свойствах имени / идентификатора, чтобы правильно отображаться в виде списка в 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)
{

}
...