2012-08-23 25 views
6

Tôi có ViewData trong bộ điều khiển của tôi mà là dân cư của một danh sách:Populating một thả xuống từ ViewData

List<employee> tempEmpList = new List<employee>(); 
tempEmpList = context.employees.ToList(); 
ViewData["tempEmpList"] = tempEmpList; 

và tôi đi qua này vào quan điểm của tôi, câu hỏi là, làm thế nào để tôi đặt nội dung của ViewData danh sách vào danh sách thả xuống?

Dữ liệu hiển thị sẽ là .name từ mục danh sách.

Tôi biết tôi có thể làm một foreach trên ViewData và tạo ra một danh sách lựa chọn, nhưng điều này có vẻ hơi dài hơi

Trả lời

17

Bạn có thể sử dụng các helper DropDownList html:

@Html.DropDownList("SelectedEmployee", 
    new SelectList((IEnumerable) ViewData["tempEmpList"], "Id", "Name")) 

Trong constructor SelectList bạn có thể chỉ định thuộc tính nào của lớp Employee nên được sử dụng làm văn bản và giá trị trong menu thả xuống (ví dụ: "Id", "Tên")

Tên của menu thả xuống ("SelectedEmployee") sẽ được sử dụng khi bạn đăng lại dữ liệu của mình lên máy chủ.

+1

này sẽ trả về lỗi: 'CS0305: Sử dụng các loại chung 'System.Collections.Generic.IEnumerable ' đòi hỏi 1 loại arguments' tôi làm như cách tiếp cận này mặc dù tôi nghĩ – JustAnotherDeveloper

+2

bạn có tham chiếu 'System.Collections.Generic' trong khung nhìn của bạn nhưng' SelectList' yêu cầu 'System.Collections.IEnumerable' thử nó với không gian tên rõ ràng:' new SelectList ((System.Collections.IEnumerable) ViewData ["tempEmpList"], "Id", "Name") ' – nemesv

+0

Tôi đã làm việc đó, phải tham khảo danh sách và nó hoạt động tốt :) – JustAnotherDeveloper

4

Thiết lập ViewData của bạn theo cách thông thường, gán một tên chính mà các bản đồ để một tài sản trong mô hình của bạn mà sẽ bị ràng buộc vào Post ...

ViewData["ModelPropertyName"] = new SelectList(...) 

Sau đó, theo quan điểm của bạn chỉ cần thêm một Html.DropDownList. ..

@Html.DropDownList("ModelPropertyName") 
2

Hãy thử với điều đó. Tôi đã thử với MVC5

@Html.DropDownList("SelectedEmployee", new SelectList((System.Collections.IEnumerable) ViewData["tempEmpList"],"id","Name"))

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