Linq 填充DropDownListFor()之前的上下文处理错误

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 =

我一直在尝试让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 = 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