2010-07-13 30 views
12

Tôi đang cố tạo một dạng xem chứa danh sách hộp kiểm được tạo động từ cơ sở dữ liệu, sau đó truy xuất danh sách các hộp kiểm đã chọn khi biểu mẫu được đăng lại.Danh sách động các hộp kiểm và mẫu gắn

model EF của tôi chứa một lớp:

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

Tôi có một mô hình xem có chứa một danh sách các:

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

My khiển get phương pháp:

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

My chế độ xem:

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

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

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

tôi phương pháp điều khiển bài:

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

tôi dường như không thể có được nó để làm việc. Các câu hỏi cơ bản của tôi được trộn lẫn dưới dạng nhận xét trong đoạn mã, nhưng để tóm tắt lại:

  • Mẫu xem của tôi có được không? (Tôi có cần phải thêm bất cứ thứ gì để chụp những cái được chọn thay vì chỉ đơn giản là danh sách để hiển thị không?)
  • Tôi nên đặt chính xác cái gì để hiển thị từng hộp kiểm?
  • Làm cách nào để truy cập vào các hộp kiểm đã chọn trong bộ điều khiển sau bài đăng?

Trả lời

14

Bạn đã xem: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx?

Chúng tôi về cơ bản đã viết kiểm soát của chúng ta để làm cho HTML như

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

Mẫu Trông Ok, chúng tôi đã viết một helper tùy chỉnh để các trang aspx của chúng tôi như sau:

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

Nếu bạn làm theo phil haacks post, mô hình của bạn sẽ tự động liên kết trong bộ điều khiển của bạn.

+0

Cảm ơn bạn rất nhiều, sự kết hợp thông tin đó đã giúp tôi vượt qua giới hạn. Bước tiếp theo (khi tôi có nhiều thời gian hơn) là để buộc nó lên trong một người trợ giúp như bạn có ... – Jon

+0

Có rất nhiều tài nguyên trên người giúp đỡ tùy chỉnh, do đó bạn sẽ ổn thôi! Thưởng thức! –

Các vấn đề liên quan