0

ドロップダウン データとモデルを含むモデルをビューに渡す際に問題が発生しています。

このコードを使用するとページが読み込まれますが、選択するとドロップダウンリストに「System.Web.MVC.SelectList」が含まれます。

これが私のコントローラーコードです。

public ActionResult Index(string productNameFilter, string productCategoryFilter, String productTypeFilter )
{
    var ddl = new Items();
    ddl.CategoryddList = itemsRepository.GetItemDdl("Item Categories").Select(c => new SelectListItem
    {
        Value = c.DropdownID.ToString(),
        Text = c.DropdownText
    });
    ViewBag.CategoryDD = new SelectList(ddl.CategoryddList, "Value", "Text");
    var model = itemsRepository.GetItemByName(productNameFilter);
    return View(model);
}

これが私の見解です

@model Ienumerable<Models.items.items>

@Html.DropDownList("productCategoryFilter", 
                   new SelectList(ViewBag.CategoryDD), 
                   "---Select Category---") 
4

1 に答える 1

1

補足 - モデルに直接バインドするのではなく、View と Model の間で ViewModel を使用する場合は、ViewModel に SelectList を配置し、@Html.Dropdown() の代わりに @Html.DropdownFor() を使用できます。ViewBag は慎重に使用する必要があります。

ただし、元の質問に戻ります。

「アイテム()」とは?あなたのラインで

var ddl = new Items();

列挙可能にする必要がない正当な理由がわかりません。

選択リストから選択リストを2回作成しているため、機能していないと思われます-コードビハインドでViewBag.CategoryDDをSelectList()として定義してから、Razorコードで新しいSelectList()を作成しています既存の選択リスト。これを行う必要はありません。

これを行う方法は、製品カテゴリ リストと製品リスト (現在のモデル)、および選択したフィルターのプロパティを含む ProductViewModel クラスを作成することです。

public class ProductViewModel
{
    public IEnumerable<Model.items.items> ProductList {get;set;}
    public IEnumerable<SelectListItem> ProductCategoryList {get;set;} //SelectList is an IEnumerable<SelectListItem>
    public string SelectedCategory  {get;set;}
}

次に、ビューでは、モデルは次のようになります

@model ProductViewModel

@Html.DisplayFor(model => model.SelectedCategory, "---Select Category---")
@Html.DropdownListFor(model => model.SelectedCategory, Model.ProductCatgoryList)
于 2012-10-22T19:48:22.580 に答える