13

データベースから動的に作成されたチェックボックスのリストを含むビューを作成し、フォームがポストバックされたときに選択されたもののリストを取得しようとしています。

私のEFモデルにはクラスが含まれています:

public class ItemIWouldLikeACheckboxFor {
    public int Id { get; set; }
    public string Description { get; set; }
}

これらのリストを含むビューモデルがあります:

public class PageViewModel {
    // various other properties
    public List<ItemIWouldLikeACheckboxFor> checkboxList { get; set; }
}

私のコントローラーの取得方法:

public ActionResult Create() {
    var viewModel = new PageViewModel();
    viewModel.checkboxList = db.ItemIWouldLikeACheckboxFors.ToList();
    return View(viewModel);
}

私の見解:

<% using (Html.BeginForm()) { %>
    <%-- other stuff here... %>

    <% foreach (var item in checkboxList) { %>
        <%: Html.CheckBox( <!-- what exactly ?????? -->) %>
    <% } %>

    <%-- other stuff here...%>
    <input type="submit" />
<% } %>

私のコントローラー投稿方法:

[HttpPost]
public ActionResult Create(PageViewModel viewModel) {
    // do stuff with other fields

    // I would like to do something like:
    foreach (var item in selectedCheckBoxes) {
        // do stuff
    }
}

私はそれを機能させることができないようです。私の基本的な質問は、コード スニペットのコメントとして混在していますが、要約すると:

  • 私のビューモデルは大丈夫ですか? (単にリストを表示するのではなく、選択したものをキャプチャするために何かを追加する必要がありますか?)
  • 各チェック ボックスをレンダリングするには、ビューに正確に何を配置する必要がありますか?
  • 投稿後にコントローラーで選択したチェックボックスにアクセスするにはどうすればよいですか?
4

2 に答える 2

15

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspxを見たことがありますか?

基本的に、HTML を次のようにレンダリングする独自のコントロールを作成しました。

<label for="Products"> Select Products </label>
<ul class="checkBoxList">
<li>
    <input type="hidden" value="0" name="Products.Index">
    <input type="checkbox" value="3424" name="Products[0].Id" id="Products0">
    <label for="Products0">iPod touch 3rd Generation</label>
</li>
<li>
    <input type="hidden" value="1" name="Products.Index">
    <input type="checkbox" value="3123" name="Products[1].Id" id="Products1">
    <label for="Products1">Creative Zen</label>
</li>
</ul>
</div>

モデルの外観は問題ありません。カスタム ヘルパーを作成したので、aspx ページは次のようになります。

<%= Html.DropDownFor(m=>m.products) %>

phil haacks の投稿に従うと、モデルはコントローラーに自動的にバインドされます。

于 2010-07-13T09:51:21.113 に答える
2

この質問にも良い答えがあります: CheckBoxList 複数選択: モデル バインド バックの難しさ

カスタムのエディター テンプレートを使用するソリューションがあります。

于 2013-03-06T19:38:37.890 に答える