2012-10-22 61 views
0

我有一個問題傳遞給查看包含下拉數據和模型的模型。MVC dropdownlist,當模型不是Ienumerable時不顯示數據

使用此代碼加載我的頁面,但下拉列表包含選中時的「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---") 

回答

1

附註 - 如果你使用一個ViewModel的視圖和模型之間的直接綁定到模型代替,你可以把你的SelectList的視圖模型,並使用@ Html.DropdownFor()而不是@ Html.Dropdown()。 ViewBag應該真的很少使用。

但是回到你原來的問題:

是什麼 「的相關文件()」?在你的線路上

var ddl = new Items(); 

我不知道有什麼好的理由你不會讓它枚舉。

我懷疑它不工作,因爲您正在從選擇列表中選擇列表兩次 - 在您的代碼中,您將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) 
+0

您好,感謝您的時間來回答這個問題。 –

相關問題