MVC 3 - В контроллере, как вы проверяете, какие элементы выбраны в представлении? - PullRequest
1 голос
/ 09 марта 2012

У меня есть 3 модели Альбомы , в которых есть экземпляры Трек и Плейлист , в которых также есть экземпляры Трек .

В настоящее время мой альбом отображает каждую дорожку с флажком и раскрывающимся списком внизу, который показывает плейлисты пользователя и кнопку добавления в плейлист. Таким образом, пользователи должны иметь возможность выбирать треки из альбома и добавлять их в список воспроизведения, который у них уже есть. Но я не уверен, что мой контроллер будет выглядеть, чтобы справиться с этим. Мой взгляд выглядит как

**Album View**
@{
    ViewBag.Title = "Details";
}

<h2>Album: @Model.Title</h2>

@{

    List<Sem_App.Models.Playlist> abc = ViewBag.Playlists;

    IEnumerable<SelectListItem> selectList =
    from c in abc
    select new SelectListItem
    {
        Text = c.PlaylistName,
        Value = c.PlaylistName,
    };
}

@using (Html.BeginForm()){
    foreach (var track in Model.Tracks)
    {
        @Html.CheckBox(track.Title)
        @track.Title
        <br />
    }

    @Html.DropDownList("abd", selectList)

    <input type="submit" value="Add selected songs to playlist" />
}

Мой метод контроллера выглядит как

[HttpPost]
public ActionResult Details(FormCollection fc)
{
    return View();
}

Как проверить, какие треки выбрал пользователь и какой плейлист выбрал пользователь в контроллере?

1 Ответ

1 голос
/ 09 марта 2012

Я предполагаю, что ваша модель для просмотра альбома похожа на @model Album.

Ваша модель будет:

class Track
{ 
 ....
 ....
 bool IsSelected;
}

А затем ваш взгляд:

 @using (Html.BeginForm()){
      for (int i = 0; i < Model.Tracks.Count(); i++) { 
       @Html.CheckBoxFor(m => m.Tracks[i].IsSelected)
       @Model.Tracks[i].Name
     }
    }

Таким образом, ваш контроллер может быть таким:

[HttpPost]
public ActionResult Details(Album album, FormCollection fc)
{
    album.Tracks;//should contain your tracks
    album.Tracks[0].IsSelected;//should return if it was selected
    fc["abd"];//should return which element was selected.
    return View();
}

Ваше представление должно быть таким, чтобы html правильно отображался, а значения были правильно привязаны к вашему контроллеру.

Вам также необходимо использовать строго типизированные методы (заканчивающиеся на для )связать другие значения обратно в ваш контроллер.И вы, вероятно, захотите использовать @Html.HiddenFor(m=>m.Id), чтобы создать скрытое поле для альбома, чтобы вы знали, какой альбом опубликован обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...