2009-07-27 61 views
5

Tôi chắc chắn đây là một hoạt động phổ biến, nhưng tôi đang gặp khó khăn trong việc giải quyết vấn đề. Đó là vấn đề của hai số <select> trên một trang web mà một trong những phụ thuộc vào khác cho danh sách các giá trị có thể.Empty SelectList trong ASP.NET MVC

Tôi có danh sách thả xuống chứa mã substatus trên trang web có danh sách giá trị có thể phụ thuộc vào lựa chọn trong danh sách thả xuống khác trên trang có chứa mã trạng thái. Trong bộ điều khiển của tôi, tôi lấy danh sách các mã trạng thái có thể từ cơ sở dữ liệu và đặt các giá trị trong một SelectList được sử dụng bởi HTMLHelper DropDownList để xây dựng danh sách lựa chọn của tôi trong khung nhìn. Tôi lấy một bản ghi mô hình có chứa mã trạng thái và sử dụng giá trị mã trạng thái đó để tra cứu các giá trị có thể của substatus trong cơ sở dữ liệu, và tôi đặt danh sách đó vào một danh sách lựa chọn khác cho danh sách thả xuống thứ hai. Trang thực hiện cuộc gọi ajax trở lại máy chủ để khôi phục danh sách thả xuống substatus bằng danh sách giá trị có thể mới khi người dùng thay đổi lựa chọn trong menu thả xuống trạng thái.

Mã trạng thái trống thực sự không phải là giá trị hợp lệ, nhưng đây là ứng dụng kiểm soát chất lượng được sử dụng để khắc phục sự cố như vậy. Vấn đề của tôi là mã trạng thái hiện tại trên bản ghi mô hình có thể đôi khi bị trống và do đó danh sách các giá trị substatus của tôi cho menu thả xuống thứ hai sẽ trống. Thật không may có vẻ như không có cách nào để tạo một ListList trống để chuyển sang HTMLHelper DropDownList, nhưng danh sách thả xuống của tôi phải được tạo khi trang tải để hỗ trợ giải pháp ajax của tôi.

Có ai đã làm việc ra một cách hiệu quả và siêu khéo léo để xử lý các tình huống như vậy không? Hoặc tôi cần phải nghỉ mát để một cái gì đó xấu xí như kiểm tra trong quan điểm của tôi nếu substatus SelectList là null, và nếu nó được sử dụng HTML khác nhau để tạo ra các thả xuống? Dường như trong tâm trí bị bệnh của tôi rằng việc có thể tạo ra một SelectList trống để bàn giao cho HTMLHelper sẽ là một giải pháp hợp lý. Tôi muốn chào đón bất kỳ ý tưởng nào.

Trả lời

3

Có thể chuyển danh sách trống sang DropDownList.

Trong điều khiển của bạn, bạn nên có một cái gì đó như:

 
var status_code_id = mymodel.status_code_id; 
var substatus_code_id = mymodel.substatus_code_id; 

ViewData["status_code_id"] = new SelectList(
    StatusCodes.FindAll(), "id", "code", status_code_id); 

ViewData["substatus_code_id"] = new SelectList(
    SubstatusCodes.FindAllForStatus(status_code_id), "id", "code", substatus_code_id); 

... nơi FindAllForStatus chứa mã tương tự như bạn đang sử dụng trong cuộc gọi AJAX của bạn để điền vào DropDownList substatus. FindAllForStatus sẽ lấy một mã trạng thái rỗng và trả về một danh sách trống.

Theo quan điểm của bạn, bạn nên có một cái gì đó như:

 
<%= Html.DropDownList("status_code_id", "--not selected--")%> 
<%= Html.DropDownList("substatus_code_id", "--not selected--")%> 
-4

Chỉ trả lại 1 mục giả, hãy để javascript kiểm tra mục này và sau đó tắt danh sách thả xuống thứ hai.

27

Bạn có thể sử dụng Enumerable.Empty()

@Html.DropDownList("dropdown-name", Enumerable.Empty<SelectListItem>()) 
+1

cũng đã làm việc với MultiSelectList bằng cách thêm Enumerable.Empty () như param – garyh