MVC3 Razor @Html.DropDownListFor

Я мог бы использовать некоторую помощь при реализации @Html.DropDownListFor. Моя цель - отфильтровать список продуктов по категориям.

Этот код отобразит окно списка:

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

}
@Html.DropDownList("CategoryID", items)

Но мне трудно работать @Html.DropDownListFor:

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

}
@Html.DropDownListFor(???, @items)

Я мог бы использовать некоторую помощь для создания части Linq @Html.DropDownListFor. Вот модель:

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

}

Ответ 1

Ваше представление строго типизировано для коллекции продуктов, поэтому я предполагаю, что вам нужно выпадающее меню для каждого продукта. Если это так, будет работать шаблон редактора:

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

И затем внутри ~/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)

Ответ 2

Моя рекомендация:

Расширьте свой класс контекста данных LINQ статической функцией, чтобы вернуть SelectList всех категорий, и используйте Html.DropDownList() для отображения этого списка.

Затем добавьте контроллер для этого же действия, которое принимает идентификатор категории и возвращает список IEnumerable<Product>, соответствующий этой категории.

Ответ 3

вот еще один способ сделать то, что вы хотите.

В модели у меня две записи

  public class Product
  {
     public int CategoryID { get; set; }
     public IEnumerable<SelectListItem> Category { get; set; }
  }

Затем я заполняю SelectlestItem из базы данных или статически. В контроллере Index.cs

   product model = new product();

   model.Category = <whereever you generated the data>;

   return View(model);

В представлении

    @using (Html.BeginForm("Edit", "Subject", FormMethard.Post, new { id = "genform"}))
    {
       <div class="vertical-space spaced-field">@Html.DropDownListFor(m => m.CategoryID, model,Category)</div>