2012-03-13 2 views
1

私のビューには12個のチェックボックスがあり、アイテムのいくつかを選択してサブミットボタンを押すと、formcollectionには[0] "IsSelected"と[1] "Playlists"という2つのキーしかありません。MVC 3 - FormCollectionでチェックボックスの値を取得できないのはなぜですか?

ここは私の見解です。モデルに強く型付けされておらず、部分的な見方です。

@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フィールド

答えて

3

チェックボックスのフォーム項目はPOST ActionResultのリストとして正しく来るために一意のname/idプロパティを必要とします。私はできれば

[HttpPost] 
public ActionResult Search(String criteria, string PlayLists, List<Track> tracks) 
{ 

} 
+0

100:私はそうのような入力要素の名前を割り当てるために、インデックスプロパティを使用して見てきた例のほとんど:

@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メソッドに通ってくるでしょう!完璧に働いた。ありがとう – user972616

関連する問題