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; } }
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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With