Linq 填充DropDownListFor()之前的上下文处理错误
我一直在尝试让DropDownList正常工作: 我的控制器代码如下:Linq 填充DropDownListFor()之前的上下文处理错误,linq,entity-framework,razor,asp.net-mvc-5,html.dropdownlistfor,Linq,Entity Framework,Razor,Asp.net Mvc 5,Html.dropdownlistfor,我一直在尝试让DropDownList正常工作: 我的控制器代码如下: public ActionResult Register() { var teams = new List<Team>(); using (var context = new TouristContext()) { teams = (from x in context.Teams select x).ToList(); } var model =
public ActionResult Register()
{
var teams = new List<Team>();
using (var context = new TouristContext())
{
teams = (from x in context.Teams select x).ToList();
}
var model = new RegisterViewModel()
{
Teams = new SelectList(teams, "Value", "Text")
};
return View(model);
}
<div class="form-group">
@Html.LabelFor(m => m.Teams, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.SelectedTeamId, Model.Teams, "Value", "Text")
</div>
</div>
当我尝试访问该页面时,会出现以下错误:
无法完成该操作,因为DbContext已被释放
我理解这个错误,但我不知道如何克服它。事实证明,它失败的原因是因为我没有所谓的值和文本 我的属性是Id和Name,因此我将代码更改为:
public ActionResult Register()
{
var teams = new List<Team>();
using (var context = new TouristContext())
{
teams = (from x in context.Teams select x).ToList();
}
var model = new RegisterViewModel()
{
Teams = new SelectList(teams, "Id", "Name")
};
return View(model);
}
现在一切都正常了。很有趣,因为你有.ToList,它应该正常工作。这是一个延迟加载问题,但我很困惑。你已经使用toList来急切地加载项目???但是,您确定团队的子项(即值和文本)也已加载吗??还是你假设的?@Ciwan你能改变这行代码,看看问题是否存在:Teams=newselectliststeams.ToList,Value,text我告诉你;你假设它是p