Динамический список флажков и привязка модели - PullRequest
12 голосов
/ 13 июля 2010

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

Моя модель 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; }
}

Мой метод get get:

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
    }
}

Я не могу заставить его работать. Мои основные вопросы смешаны в виде комментариев в фрагментах кода, но резюмируем:

  • В порядке ли моя модель зрения? (мне нужно добавить что-нибудь, чтобы захватить выбранные, а не просто список для отображения?)
  • Что именно я должен добавить в представление для отображения каждого флажка?
  • Как получить доступ к выбранным флажкам в контроллере после публикации?

Ответы [ 2 ]

15 голосов
/ 13 июля 2010

Вы видели: 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) %>

Если вы следите за публикацией Фила Хака, ваша модель автоматически свяжется с вашим контроллером.

2 голосов
/ 06 марта 2013

Также хороший ответ в этом вопросе: Несколько вариантов выбора CheckBoxList: сложность привязки модели

Имеется решение, использующее пользовательский шаблон редактора.

...