首页 > 解决方案 > 重定向页面时获取 System.ObjectDisposedException

问题描述

更新:问题是 OnGet 方法是异步的。谢谢大家的帮助和意见!

在我的第一页(主页)中,我得到了一个用户列表:

主页型号:

public async void OnGetAsync()
    {
            var everything = await _context.Users.ToListAsync();
            GetUsers = everything;
    }

然后我在页面上创建一个用户列表和一个链接,该链接重定向到具有另一个用户投注列表的页面:

主页:

<ul class="list-group">
@foreach (var user in Model.GetUsers)
{
<li class="list-group-item">
    //Irrelevant stuff
    <a asp-page="./UserBets" asp-route-id="@user.Id">View Bets</a>
</li>
}
</ul>

重定向到 UserBets,这里是 UserBetsModel:

public async void OnGetAsync(string Id)
    {
        if (Id != null)
        {   //Debugging             
            Message += Id;
            using (var db = _context)
            {
                var everything = await _db.Bet.Where(a => a.UserId == Id).Select(s => s.MatchId).SingleAsync();
                GetBets = everything;
            }
        }            
    }

当它到达那里时,我收到一条消息:

System.ObjectDisposedException: '无法访问已处置的对象。此错误的一个常见原因是释放从依赖注入中解析的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。如果你使用依赖注入,你应该让依赖注入容器负责处理上下文实例。对象名称:'AsyncDisposer'。

我试过没有使用范围,在两个页面模型上都有它。问题是我并不真正理解这里的问题,所以如果我没有给你足够的上下文或代码但问你是否需要更多,我很抱歉。

我想要做的是打印出用户投注列表。提前致谢!

标签: c#asp.net-coreentity-framework-corerazor-pages

解决方案


using (var db = _context)
{
    var everything = await _context.Bet.Where(a => a.UserId == Id).Select(s => s.MatchId).SingleAsync();
    GetBets = everything;
}

using将在生产线_context后立即处理掉。GetBets = everything;问题是它_context不属于您的方法,因此使用的任何其他代码_context都会发现它已被处理。我想您在其他地方也有类似的代码正在处理它,这可能就是这里出现问题的原因。

在不再使用共享对象之前不要处理共享对象(通常在包含类被销毁时 - 您应该IDisposable在父类上添加自己的实现)。


推荐阅读