2011-11-16 48 views
5

Tôi có ứng dụng web C# .Net MVC3. Tôi đang sử dụng danh sách thả xuống trên tất cả các nơi và có thành công. Tuy nhiên, có hai điều tôi gặp phải. Sự khác biệt duy nhất là tôi đang tạo ra SelectLists khi đang bay trong mã thay vì sử dụng bảng tra cứu. Tôi sử dụng bảng tra cứu cho tất cả các Drop Down khác. Khi tôi QuickWatch số SelectLists trong mã, đúng mục có giá trị thuộc tính Selected được đặt thành true. Tuy nhiên, khi tải trang, mục có thuộc tính Selected không được hiển thị. Mục đầu tiên là. Ý tưởng nào? Đây là một trong những người đáng yêu. Tôi đã thử cả hai cách dưới đây. Trong cả hai trường hợp, ViewBag.DateToYear và SelectList DateToYear có giá trị đúng và 'chọn' thuộc tính thiết lậpDanh sách thả xuống MVC3 không chọn mục đã chọn

1)

// điều khiển

 IList<string> dateToYear = new List<string>(); 
     for (int i = 0; i < numberYears; i++) 
     { 
      dateToYear.Add(DateTime.Now.AddYears(i).Year.ToString()); 
     } 
     ViewBag.DateToYear = new SelectList(dateToYear,"2014") 

// Xem

 @Html.DropDownList("DateFromYear", (SelectList)ViewBag.DateToYear) 

2) // Bộ điều khiển CÙNG như trên

// Xem

List<SelectListItem> DateToYear = new List<SelectListItem>(); 
foreach (var m in ViewBag.DateToYear) 
{ 
    DateToYear.Add(new SelectListItem { Selected = @m.Selected, Value = @m.Text, Text = @m.Text }); 
} 

@Html.DropDownList("DateFromYear", DateToYear) 
+2

bạn có thể đăng một số mã không? –

+0

@Thhomas .... điều đó có giúp ích gì không? – MikeTWebb

+0

Bạn đã thử DropDownListFor chưa? Tại sao bạn không có các tùy chọn SelectList như một phần của A hoặc ViewBag hoặc B) một kiểu xem mạnh mẽ? Tôi không nhìn thấy những gì bạn nhận được từ cách bạn đang tiếp cận này. –

Trả lời

5

Không chắc nếu đây là trường hợp, nhưng tôi đã có một số vấn đề với dropdownboxes không nhận được lựa chọn một vài ngày trước.

Vấn đề của tôi là: Tôi có @model.Options và tôi đã tạo một @html.dropdownlist("Options", @model.Options, [...]). Tuy nhiên, bởi vì họ có cùng tên nó bằng cách nào đó mâu thuẫn. Khi tôi sử dụng @html.dropdownlist("anythingElse", @model.Options, [...]) nó hoạt động tốt.

Khi tôi xem nhanh return View(model) các tùy chọn đã chọn dường như cũng được đặt chính xác, vì vậy phải mất một lúc để hiểu điều đó. Có lẽ bạn có cùng một vấn đề?

+0

@Ron ... bạn ROCK! Điều đó là vậy đó. Người đàn ông, đó là lỗi cổ điển – MikeTWebb

+0

bạn được chào đón. Mừng vì tôi có thể giúp. Đã cho tôi khá dài để tìm ra nó quá: P –

+0

Cảm ơn nó làm việc cho tôi quá ... –

6

Vấn đề là, SelectList hoạt động như được thiết kế. Lỗi trong thiết kế. Bạn có thể thiết lập thuộc tính đã chọn trong SelctedItem, nhưng điều này sẽ hoàn toàn bị bỏ qua, nếu bạn duyệt qua danh sách bằng GetEnumerator() (hoặc nếu Mvc làm điều đó cho bạn). Mvc sẽ tạo mới SelectfListItems thay thế.

Bạn phải sử dụng ctor SelectList với SelectListItem [], Tên văn bản, Giá trị tên và SelectedValue. Hãy chú ý để vượt qua như SelectedValue giá trị VALUE của SelectListItem, mà bạn muốn được chọn, không phải là chính SelectListItem! Ví dụ:

Tại sao không chỉ làm trong bộ điều khiển?

Pseudo code:

// điều khiển

ViewBag.DateToYear = new SelectList(new[] 
{ 
new SelectListItem { Text = "10", Value = "10" }, 
new SelectListItem { Text = "15", Value = "15" } 
new SelectListItem { Text = "25", Value = "25" }, 
new SelectListItem { Text = "50", Value = "50" }, 
new SelectListItem { Text = "100", Value = "100" }, 
new SelectListItem { Text = "1000", Value = "1000" }, 
}, "SomeText", "Value", "15"); 

Lựa chọn thứ hai nên được chọn.

+0

Tôi đã thử bạn đang tiếp cận, quá và nó đã làm việc ... cảm ơn – MikeTWebb

0

Điều tương tự cũng xảy ra với tôi, đảm bảo bạn không cung cấp ID giống như tên thuộc tính mà bạn đã cung cấp trên Mô hình của mình. Đó là cách tôi giải quyết vấn đề này ...

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