2010-06-16 36 views

Trả lời

162

Xem this MSDN articleexample usage here on Stack Overflow.

Hãy nói rằng bạn có lớp LINQ/POCO sau:

public class Color 
{ 
    public int ColorId { get; set; } 
    public string Name { get; set; } 
} 

Và chúng ta hãy nói rằng bạn có mô hình sau:

public class PageModel 
{ 
    public int MyColorId { get; set; } 
} 

Và, cuối cùng, chúng ta hãy nói rằng bạn có danh sách các màu sau đây Họ có thể đến từ một truy vấn LINQ, từ một danh sách tĩnh, v.v .:

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color { 
     ColorId = 1, 
     Name = "Red" 
    }, 
    new Color { 
     ColorId = 2, 
     Name = "Blue" 
    } 
}; 

Theo quan điểm của bạn, bạn có thể tạo một danh sách thả xuống như vậy:

<%= Html.DropDownListFor(n => n.MyColorId, 
         new SelectList(Colors, "ColorId", "Name")) %> 
+0

thực sự rõ ràng. Tôi muốn biết nơi tôi nên đặt IEnumerable trong mã của tôi? Tôi biết nó có vẻ ngu ngốc như câu hỏi nhưng tôi rất mất mát và mới trong đó: s – Rinesse

+5

Không phải lo lắng, bạn bè. Tôi biết nó cảm thấy thế nào.:) Như bạn đã đề xuất trong câu hỏi ban đầu của mình, đây có phải là danh sách tĩnh mà bạn sắp tạo trong mã hay bạn sẽ lấy danh sách này từ cơ sở dữ liệu? –

+0

danh sách tĩnh chứa 4 tùy chọn không frop một cơ sở dữ liệu – Rinesse

51
<%: 
    Html.DropDownListFor(
      model => model.Color, 
      new SelectList(
        new List<Object>{ 
         new { value = 0 , text = "Red" }, 
         new { value = 1 , text = "Blue" }, 
         new { value = 2 , text = "Green"} 
        }, 
        "value", 
        "text", 
        Model.Color 
      ) 
     ) 
%> 

hoặc bạn có thể viết không có lớp học, đặt một cái gì đó như thế này trực tiếp vào xem.

+0

Cảm ơn, thật khó để tìm một giải pháp cho ... – ctorx

+2

Tôi nhận được lỗi dưới đây khi thử mã của bạn: "Tham chiếu đối tượng không được đặt thành phiên bản của một đối tượng. " –

+9

ý tưởng tồi để thêm logic mô hình vào chế độ xem của bạn –

28

Tránh của rất nhiều fingering mỡ bằng cách bắt đầu với một từ điển trong Model

namespace EzPL8.Models 
{ 
    public class MyEggs 
    { 
     public Dictionary<int, string> Egg { get; set; } 

     public MyEggs() 
     { 
      Egg = new Dictionary<int, string>() 
      { 
       { 0, "No Preference"}, 
       { 1, "I hate eggs"}, 
       { 2, "Over Easy"}, 
       { 3, "Sunny Side Up"}, 
       { 4, "Scrambled"}, 
       { 5, "Hard Boiled"}, 
       { 6, "Eggs Benedict"} 
      }; 

    } 


    } 

Trong Xem chuyển đổi nó vào một danh sách để hiển thị

@Html.DropDownListFor(m => m.Egg.Keys, 
         new SelectList(
          Model.Egg, 
          "Key", 
          "Value")) 
25

Hi ở đây là làm thế nào tôi đã làm nó trong một Dự án:

 @Html.DropDownListFor(model => model.MyOption,     
        new List<SelectListItem> { 
         new SelectListItem { Value = "0" , Text = "Option A" }, 
         new SelectListItem { Value = "1" , Text = "Option B" }, 
         new SelectListItem { Value = "2" , Text = "Option C" } 
        }, 
        new { @class="myselect"}) 

Tôi hy vọng nó sẽ giúp Ai đó. Cảm ơn

8

Hoặc nếu đó là từ một bối cảnh sở dữ liệu bạn có thể sử dụng

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() })) 
+14

Vui lòng không khuyến khích loại vô nghĩa này. Nếu bạn muốn tham khảo ngữ cảnh db của mình trong chế độ xem Dao cạo, ose của chúng tôi rằng giống như xây dựng phần mềm theo cách chính xác thì đây là một ý tưởng khủng khiếp. Ràng buộc khung nhìn Razor của bạn vào một lớp mô hình khung nhìn, bất kỳ dữ liệu nào cần thiết cho khung nhìn được lưu trữ trong một cá thể của mô hình khung nhìn được tạo bởi bộ điều khiển. Đây là một phần lý do tôi rời xa .Net, quá nhiều nhà phát triển khủng khiếp làm những điều khủng khiếp với mã của họ khiến cho những người khác đau đầu rất nhiều. Tôi đặt cược bạn đặt tất cả logic kinh doanh của bạn trong bộ điều khiển của bạn! – JBeckton

+2

Trước hết, xin lỗi vì bất kỳ sự vi phạm ngữ pháp nào vì tiếng Anh không phải là ngôn ngữ đầu tiên của tôi. Nó luôn luôn tốt đẹp để xem ai đó làm cho một bình luận suy nghĩ như vậy, tôi hoan nghênh bạn sir rằng bạn đã dành thời gian để đóng góp. Nó cũng luôn luôn yên tâm rằng nghề nghiệp của các nhà phát triển là trong tay tốt như bạn, kể từ khi tôi sẽ không làm. Những lời thích của nhận xét không biết gì của bạn là lý do tại sao tôi không bao giờ đăng bài ở đây nữa. Tôi có thể thông báo với bạn rằng khi tôi viết điều này, tôi đã học được 8 tháng và chưa bao giờ chạm vào Phát triển Web trước đó. Tôi muốn chia sẻ một aproach khác với những kiến ​​thức nhỏ mà tôi có. –

+4

8 tháng trong? Vậy tại sao lại cố giải quyết vấn đề khi bạn không biết làm thế nào? Bình luận của tôi là xa ngu dốt, tôi thấy công cụ này ngày này qua ngày khác. Bạn phải bắt đầu xem xét số lượng công việc thủ công mà bạn có nghĩa vụ với đồng nghiệp của mình. hãy tưởng tượng bạn có một ứng dụng doanh nghiệp với hàng trăm lượt xem và CTO của bạn muốn chuyển sang Oracle DB. Hãy tưởng tượng chi phí bằng chữ của việc tái cấu trúc tất cả các khung nhìn và bộ điều khiển sử dụng danh sách thả xuống chỉ vì một dòng mã của bạn! Tôi không cố gắng xúc phạm bạn, chỉ cần cố gắng giải thích cho bạn làm thế nào một lời khuyên xấu ít có thể có tác động rất lớn. – JBeckton

4

Với "Hãy chọn một Item"

@Html.DropDownListFor(model => model.ContentManagement_Send_Section, 
    new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } } 
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })), 
    new { @class = "myselect" }) 

Xuất phát từ các mã: Thạc sĩ Programmer & & Joel Wahlund;
Tham chiếu King: https://stackoverflow.com/a/1528193/1395101JaredPar;

Cảm ơn Thạc sĩ Programmer & & Joel Wahlund & & JaredPar;

Bạn bè may mắn.

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