ASP.NET MVC dropdownlist

后端 未结 4 1074
后悔当初
后悔当初 2021-02-06 09:35

Can someone point me to an article that shows the dropdownlist being populated from linq to sql (text and value being set).

Thanks Danny

相关标签:
4条回答
  • 2021-02-06 10:07

    Here's one great article by Rob Connery

    Controller Code

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

    View Markup

    <%=Html.DropDownList("CategoryID")%>
    
    0 讨论(0)
  • 2021-02-06 10:07

    If you need to add html attributes to your tags this would be a way of doing it. Pass a Model to your View e.i. "return View(someModel)" then in the View:

            <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 is a property in your Model like this:

    public IEnumerable GroupsDropDown { get; set; }

    0 讨论(0)
  • 2021-02-06 10:14

    Now that the HtmlHelper extension takes an IEnumerable<SelectListItem>, I don't create SelectList's, but usually just create the SelectListItems with LINQ.

    Controller

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

    View

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

    or if I want a default selection

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

    EDIT:

    The interesting bit about the dropdown list is that you need to supply a range of values from which to select a single value that fits into your actual data model. I typically provide the range (menu items) via view data and expect back the model values when the page is posted. If you wanted strongly-typed menus as well, you'd need to provide a view-only model that encapulates your real model and any menus. This would involve, on posting, the use of prefixes to identify the model elements. The trade-off, to my mind, is simpler model binding on post vs. the use of strongly-typed menus in the view. I'm not hung up on the latter, so I opt not to put my menus in the model. If you wanted to do this, though, it might look like the following.

    Model

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

    Controller

    Display action

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

    Create action

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

    View

    <%= Html.TextBox("Category.Name") %>
    
    <%= Html.DropDownList("Category.CategoryID",
                          Model.CategoryMenu,
                          "Select a Category" ) %>
    
    0 讨论(0)
  • 2021-02-06 10:30

    Write in the view:

    @{
    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);
    }
    

    }

    You can reference it ike that:

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

    You can also choose a specific row:

    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>
    
    0 讨论(0)
提交回复
热议问题