我在查看包含下拉数据和模型的模型时遇到问题。
使用此代码加载我的页面,但下拉列表在选中时包含“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---")
答案 0 :(得分:1)
附注 - 如果在View和Model之间使用ViewModel而不是直接绑定到模型,则可以将SelectList放在ViewModel上并使用@ Html.DropdownFor()而不是@ Html.Dropdown()。应该谨慎使用ViewBag。
然而回到原来的问题:
什么是“Items()”?在你的行
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)