2010-07-13 24 views
12

Veritabanından dinamik olarak oluşturulmuş onay kutularının listesini içeren bir görünüm oluşturmaya çalışıyorum ve sonra form geri gönderildiğinde seçili olanların listesini alın.Onay kutularının ve model bağlama dinamik listesi

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

Ben bunların bir listesini içeren bir görünüm modeli var:

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

Benim denetleyicisi olsun yöntemi:

Benim EF modeli bir sınıf içerir

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

Benim görünüm:

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

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

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

Benim denetleyicisi sonrası yöntemi: Ben o iş için görünmektedir olamaz

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

. Temel sorularım kod parçacıklarında yorumlar olarak karıştırılır, ancak tekrarlamak için:

  • Görünüm modelim tamam mı? (Sadece görüntülenecek listenin aksine seçilenleri yakalamak için herhangi bir şey eklemem gerekir mi?)
  • Her onay kutusunu görüntülemek için tam olarak neye bakmalıyım?
  • Kayıttan sonra kontrolördeki seçili onay kutularına nasıl erişirim?

cevap

14

Şunu gördünüz mü: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx? Eğer Phil'i izlerseniz

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

: Bizim aspx sayfaları gibi görünmesini böylece

Biz temelde

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

Modeli Tamam görünüyor gibi HTML işlemek için kendi kontrolünü yazdım, biz, özel bir yardımcı yazdı hack postası, modeliniz otomatik olarak kontrol cihazınıza bağlanmalıdır. Ayrıca

+0

Çok teşekkürler, bu bilgi kombinasyonu beni hattan geçirdi. Bir sonraki adım (daha fazla zamanım olduğunda), sizin gibi bir yardımcıda onu bağlamaktır ... – Jon

+0

Özel yardımcılarda çok fazla kaynak var, bu yüzden iyi olacaksınız! Keyfini çıkarın! –

İlgili konular