Tutorial :ASP.NET MVC dropdownlist



Question:

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

Thanks Danny


Solution:1

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" ) %>  


Solution:2

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")%>  


Solution:3

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; }


Solution:4

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>  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »