Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC3 Razor @Html.DropDownListFor

I could use some help implementing @Html.DropDownListFor. My objective is to filter the list of Products by Category.

This code will display a list box:

@model IEnumerable<Sample.Models.Product> @{     List<Sample.Models.Category> list = ViewBag.Categories;     var items = new SelectList(list, "CategoryID", "CategoryName");  } @Html.DropDownList("CategoryID", items) 

But I'm having trouble getting @Html.DropDownListFor to work:

@model IEnumerable<Sample.Models.Product> @{     List<Sample.Models.Category> list = ViewBag.Categories;     var items = new SelectList(list, "CategoryID", "CategoryName");  } @Html.DropDownListFor(???, @items) 

I could use some help constructing the Linq portion of @Html.DropDownListFor. Here is the model:

public class Product {     public int ProductID { get; set; }     public string ProductName { get; set; }     public int CategoryID { get; set; }     public string QuantityPerUnit { get; set; }     public Decimal? UnitPrice { get; set; }     public short UnitsInStock { get; set; }      public virtual Category Category { get; set; } }  public class Category {     public int CategoryID { get; set; }     public string CategoryName { get; set; }      public virtual ICollection<Product> Products { get; set; }  } 
like image 437
user625351 Avatar asked Feb 21 '11 20:02

user625351


2 Answers

Your view is strongly typed to a collection of products so I suppose that you need a drop down for each product. If this is the case an editor template would work:

@model IEnumerable<Sample.Models.Product> @Html.EditorForModel() 

And then inside ~/Views/Shared/EditorTemplates/Product.cshtml

@model Sample.Models.Product @{     List<Sample.Models.Category> list = ViewBag.Categories;     var items = new SelectList(list, "CategoryID", "CategoryName"); } @Html.DropDownListFor(x => x.CategoryID, @items) 
like image 99
Darin Dimitrov Avatar answered Oct 15 '22 03:10

Darin Dimitrov


My recommendation:

Extend your LINQ data context class with a static function to return a SelectList of all categories, and use Html.DropDownList() to display this list.

Then, add a controller for this same Action that accepts category ID and return the IEnumerable<Product> list that corresponds to that category.

like image 39
Keith Avatar answered Oct 15 '22 03:10

Keith