我的模型看起来像这样
public IEnumerable<SelectListItem> ProductTypes { get; set; }
public ProductContent()
{
productxEntities db = new productxEntities();
ProductTypes = db.ProductCodes.Select(c => new SelectListItem
{
Value = c.product_type.ToString(),
Text = c.code.ToString()
});
}
当我尝试将它用于DropDownList
时,我得到一个错误,说明转换是错误的...在MVC3 Razor C#中使用DB中的列表填充DDL的正确方法是什么,我有一个紧密耦合的视图这种型号。
@Html.DropDownList("ProductTypes", (IEnumerable<SelectListItem>) Model.ProductTypes)
这是错误
无法转换类型为'System.Data.Entity.Infrastructure.DbQuery
1[System.Web.WebPages.Html.SelectListItem]' to type 'System.Collections.Generic.IEnumerable
1 [System.Web.Mvc.SelectListItem]'的对象。
这是我的控制器
public ActionResult Create()
{
ProductContent productViewModel = new ProductContent();
return PartialView("../PartialViews/NewProduct", productViewModel);
}
答案 0 :(得分:10)
您应该在EF查询的某处调用ToList
。否则,您将直接向View返回Queryable。
可能是这样的:
public ProductContent()
{
productxEntities db = new productxEntities();
ProductTypes = db.ProductCodes.ToList().Select(c => new SelectListItem
{
Value = c.product_type.ToString(),
Text = c.code.ToString()
});
}
正如我在评论中提到的那样;我不鼓励在Model的构造函数中使用这种代码。其他人应该将其分配给模型。
然后,您应该可以在视图中删除您的演员了。
答案 1 :(得分:3)
问题的根源是System.Web.WebPages.Html.SelectListItem
和System.Web.Mvc.SelectListItem
类型不可分配。
控制器中可能存在与视图不同的命名空间导入。在这种情况下,您需要明确:模型需要使用new System.Web.Mvc.SelectListItem(...)
或视图需要转换为(IEnumerable<System.Web.WebPages.Html.SelectListItem>)
。