Asp.net mvc 如何使用实体框架在ASP.NET MVC中填充Dropdowlistfor

Asp.net mvc 如何使用实体框架在ASP.NET MVC中填充Dropdowlistfor,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,看法 控制器 @Html.DropDownListFor(model => model.SupplierId, new SelectList(new Pharmacy_Project.Models.Supplier().SupplierList, "Value", "Text"), new { @class = "form-control" }) public IEnumerable供应商列表 { 得到 { 使用(var db=new DatabaseContext()

看法

控制器

@Html.DropDownListFor(model => model.SupplierId,
    new SelectList(new Pharmacy_Project.Models.Supplier().SupplierList, "Value", "Text"), 
    new { @class = "form-control" })
public IEnumerable供应商列表
{
得到
{
使用(var db=new DatabaseContext())
{
var list=(从数据库中的s。供应商选择s)。选择(x=>new SelectListItem)
{
Text=x.供应商名称,
Value=x.SupplierId.ToString()
});
退货清单;
} 
}
}
错误:

无法完成该操作,因为DbContext已被释放

我试图更改
返回列表.Tolist()但我随后遇到了以下错误:

LINQ to实体无法识别方法“System.String” 方法,而此方法无法转换为存储 表情


您需要首先使用
.ToList()
(或
AsEnumerable()
)具体化查询

旁注:您已经创建了
IEnumerable
,因此在视图中添加另一个相同的
IEnumerable
是毫无意义的额外开销,您的视图应该是

var list = (from s in db.Suppliers select s).ToList().Select(x => new SelectListItem{ ... }
或者更好的方法是,使用具有属性
public IEnumerable SupplierList{get;set;}
的视图模型,并在将其发送到视图之前将其填充到控制器中,以便该视图是

@Html.DropDownListFor(model => model.SupplierId, Pharmacy_Project.Models.Supplier().SupplierList, new { @class = "form-control"})

还请注意,您还可以使用
new SelectList(db.Suppliers,“SupplierId”,“SupplierName”)
生成
SelectList

var list=(从db.Suppliers中的s选择s)。ToList()。选择(..
但你究竟为什么要从视图中的原始代码创建另一个
SelectList
?@StephenMuecke我刚刚试过,我在另一篇文章中看到了这一点。@StephenMuecke这是原始代码。var list=(来自db中的s。供应商选择新的SelectListItem){Text=s.SupplierName,Value=s.SupplierId.ToString()});@StephenMuecke我看到你今天心情不好,:)查看你对其他问题的评论。是的,我知道-在我最后的评论中使用代码。
@Html.DropDownListFor(model => model.SupplierId, Pharmacy_Project.Models.Supplier().SupplierList, new { @class = "form-control"})
@Html.DropDownListFor(model => model.SupplierId, Model.SupplierList, new { @class = "form-control"})