2013-04-16 49 views
5

Tôi muốn tạo DropDownLists động ra khỏi Danh sách, cung cấp Danh sách lựa chọn và trường để lưu vùng chọn.tạo nhiều DropDownListFor trong vòng lặp foreach

public class ViewModel 
{ 
    public List<Material_Select> materialSelect { get; set; } 
} 

public class Material_Select 
{ 
    public SelectList selectList { get; set; } 
    public int MaterialId { get; set; } 
} 

Trong chế độ xem, tôi muốn lặp qua tài liệuChọn danh sách và tạo DropDownLists động.

Something như thế này:

int count = 0; 
foreach (var item in Model.materialSelect) 
{ 
    count++; 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.materialSelect) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(item.MaterialId, item.selectList) 
    </div>  
} 

Tại HttpPost ActionResult tôi cần để có được những giá trị đã chọn. Có ai có một ý tưởng làm thế nào để giải quyết điều này?

+0

Bạn không thể sử dụng vòng lặp 'foreach' để tạo điều khiển biểu mẫu cho bộ sưu tập - tham khảo [câu trả lời này] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943 # 30094943) để được giải thích) –

Trả lời

6

Bạn có lẽ nên được sử dụng EditorTemplates. Điều này cho phép bạn làm excatly những gì bạn đang mô tả. Nếu bạn tạo một cái nhìn cục bộ mạnh mẽ, đánh máy trong ~/Views/Shared/EditorTemplates/Material_Select.cshtml (quan điểm đã được đặt tên giống như các mô hình) trông giống như:

@model Material_Select 

<div class="editor-label"> 
    @Html.LabelFor(m => m.MaterialId) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(m => m.MaterialId, Model.selectList) 
</div> 

Sau đó, trong hình thức tổng thể của bạn bạn chỉ có thể gọi:

@Html.EditorFor(m => m.materialSelect) 

Điều này sẽ tự động liệt kê bộ sưu tập của bạn và hiển thị mẫu trình chỉnh sửa cho từng mục trong bộ sưu tập.

+1

Thats như ma thuật :) – float

5

Giả sử số bắt đầu trong 0 và phương pháp bài hành động của bạn nhận được một tham số kiểu ViewModel, bạn có thể thử điều này cho ràng buộc các MaterialId cho từng thả xuống:

foreach (var item in Model.materialSelect) 
{ 
    count++; 
    <div class="editor-label"> 
     Name for de dropdown 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("materialSelect[" + count + "].MaterialId ", item.selectList) 
     @Html.ValidationMessageFor(model => model.gradationId) 
    </div>  
} 
+0

Cảm ơn! Tôi đã thay đổi câu trả lời của bạn. Trả lời từ @Ian Routledge phù hợp hơn vì nó sử dụng các kỹ thuật mvc cơ bản. – float

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