web-dev-qa-db-ja.com

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)

@Html.DropDownListForのLinq部分を作成するには、いくつかのヘルプを使用できます。モデルは次のとおりです。

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

}
26
user625351

ビューは製品のコレクションに強く型付けされているため、各製品にドロップダウンが必要だと思います。この場合、エディターテンプレートが機能します。

@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)
47
Darin Dimitrov

私の推薦:

すべてのカテゴリのSelectListを返す静的関数を使用してLINQデータコンテキストクラスを拡張し、Html.DropDownList()を使用してこのリストを表示します。

次に、この同じアクションに対して、カテゴリIDを受け入れるコントローラーを追加し、IEnumerable<Product>そのカテゴリに対応するリスト。

2
Keith

ここにあなたが望むことをする別の方法があります。

モデルには2つのエントリがあります

  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>
0
user1181334