2010-07-13 1 views
12

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

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

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

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

ответ

14

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

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

+0

Большое спасибо, что эта комбинация информации достала меня по линии. Следующий шаг (когда у меня больше времени) заключается в том, чтобы связать его в помощнике, как у вас есть ... – Jon

+0

Есть много ресурсов на пользовательских помощниках, так что с вами все будет в порядке! Наслаждайтесь! –