2009-04-25 81 views
7

Ai đó có thể chỉ cho tôi một bài viết hiển thị danh sách thả xuống được điền từ LINQ đến sql (văn bản và giá trị đang được đặt).Danh sách thả xuống ASP.NET MVC

Cảm ơn Danny

Trả lời

9

Bây giờ, phần mở rộng HtmlHelper mất IEnumerable<SelectListItem>, tôi không tạo ra danh sách của SelectList, nhưng thường chỉ tạo ra các SelectListItems với LINQ.

khiển

ViewData["CategoryID"] = categories.Select(c => new SelectListItem 
               { 
                Text = c.CategoryName, 
                Value = c.CategoryID 
               } 
             ); 

Xem

<%= Html.DropDownList("CategoryID") %> 

hoặc nếu tôi muốn có một lựa chọn mặc định

<%= Html.DropDownList("CategoryID", 
         (IEnumerable<SelectListItem>)ViewData["CategoryID"], 
         "Select a Category") %> 

EDIT:

Bit thú vị về danh sách thả xuống là bạn cần cung cấp một loạt các giá trị để chọn một giá trị phù hợp với mô hình dữ liệu thực tế của bạn. Tôi thường cung cấp phạm vi (các mục menu) thông qua dữ liệu chế độ xem và mong đợi trở lại các giá trị của mô hình khi trang được đăng. Nếu bạn muốn có các trình đơn được đánh máy mạnh, bạn cần cung cấp một mô hình chỉ xem để gói gọn mô hình thực của bạn và bất kỳ menu nào. Điều này sẽ liên quan đến việc đăng tải, sử dụng tiền tố để xác định các yếu tố mô hình. Thương mại-off, để tâm trí của tôi, là mô hình đơn giản ràng buộc trên bài so với việc sử dụng các menu mạnh mẽ đánh máy trong xem. Tôi không treo lên trên thứ hai, vì vậy tôi chọn không để đưa các menu của tôi trong mô hình. Nếu bạn muốn làm điều này, mặc dù, nó có thể trông giống như sau.

Mẫu

public class CategoryViewModel 
{ 
    public Category Category { get; set; } 
    public IEnumerable<SelectListItem> CategoryMenu { get; set; } 
    ... 
} 

khiển

hành động hiển thị

var model = new CategoryViewModel(); 
model.CategoryMenu = categories.Select(c => new SelectListItem 
               { 
                Text = c.CategoryName, 
                Value = c.CategoryID 
               } 
            ); 

... 
return View(model); 

Tạo tác vụ

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create([Bind(Prefix="Category")]Category category) 
{ 
    ... 
} 

Xem

<%= Html.TextBox("Category.Name") %> 

<%= Html.DropDownList("Category.CategoryID", 
         Model.CategoryMenu, 
         "Select a Category") %> 
+0

Thats tuyệt vời. Bạn có thể cung cấp một ví dụ sử dụng điều này với mẫu ViewModel không. Cảm ơn – Danny

5

Dưới đây là một bài viết tuyệt vời bởi Rob Connery

điều khiển Mã

NorthwindDataContext db = new NorthwindDataContext(); 
var categories = from c in db.Categories select c; 
ViewData["CategoryID"] = new SelectList(categories, "CategoryID", "CategoryName"); 

Xem Markup

<%=Html.DropDownList("CategoryID")%> 
+1

Bạn không cần đối số thứ hai trong trình trợ giúp html. Phương pháp sẽ tìm kiếm cho bạn nếu bạn chỉ cần vượt qua "CategoryID". –

+0

@cagdas, obsevation tốt +1 –

0

Nếu bạn cần thêm html thuộc tính cho thẻ của bạn này sẽ là một cách để làm việc đó. Chuyển mô hình đến chế độ xem của bạn e.i."Return View (someModel)" sau đó trong Xem:

 <select id="Groups" name="Groups"> 
      <% foreach (SelectListItem item in Model.GroupsDropDown) 
       { 
        if (item.Selected) 
        {%> 
         <option selected="selected" title="<%= item.Text %>"> 
          <%= item.Text%></option> 
        <%} 
        else 
        {%> 
         <option title="<%= item.Text %>"> 
          <%= item.Text%></option> 
        <%} %> 
      <% } %> 
     </select> 

GroupsDropDown là một tài sản trong Model của bạn như thế này:

công IEnumerable GroupsDropDown {get; bộ; }

0

Viết trong giao diện:

@{ 
TaskManagerContext context = new TaskManagerContext(); 

IEnumerable<TestTask1.Models.User> CDrop = context.Users.ToList(); 
List<SelectListItem> selectList = new List<SelectListItem>(); 
foreach (var c in CDrop) 
{ 
    SelectListItem i = new SelectListItem(); 
    i.Text = c.Username.ToString(); 
    i.Value = c.ID.ToString(); 
    selectList.Add(i); 
} 

}

Bạn có thể tham khảo nó ike rằng:

@Html.DropDownListFor(m => m.UserID, 
          new SelectList(selectList, "Value", "Text")); 

Bạn cũng có thể chọn một hàng cụ thể:

TaskManagerContext context = new TaskManagerContext(); 
UsersRepository repo = new UsersRepository(); 
User user = repo.GetAll().FirstOrDefault(u => u.ID == ViewBag.UserId); 
ViewBag.User = user; 

<div><h3><label>@ViewBag.Title1</label>@ViewBag.User.Username</h3></div> 
Các vấn đề liên quan