Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC dropdownlist

Tags:

asp.net-mvc

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

Thanks Danny

like image 359
Danny Avatar asked Apr 25 '09 16:04

Danny


People also ask

How can use static dropdown in MVC?

Binding MVC DropDownList with Static Values Just add an Html helper for DropDownList and provide a static list of SelectListItem. The values added as SelectListItem will be added and displayed in the DropDownList. In this way, you do not need to add anything to Controller Action.


2 Answers

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" ) %>
like image 187
tvanfosson Avatar answered Sep 25 '22 08:09

tvanfosson


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")%>
like image 28
Jose Basilio Avatar answered Sep 24 '22 08:09

Jose Basilio