c# - 重定向页面时获取 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'。
我试过没有使用范围,在两个页面模型上都有它。问题是我并不真正理解这里的问题,所以如果我没有给你足够的上下文或代码但问你是否需要更多,我很抱歉。
我想要做的是打印出用户投注列表。提前致谢!
解决方案
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
在父类上添加自己的实现)。
推荐阅读
- javascript - Glob 导入返回 Parcel 中的空模块
- linter - 使用 webhint 时出现此错误的原因是什么:错误:找不到模块“@hint/utils-dom”?
- powershell - 如果必须将数据放入变量中,Powershell 函数将不起作用
- html - 在 div 或 box 容器上剪切 CSS 箭头
- javascript - 如何在jquery中使滚动页脚淡入?
- postgresql - 在 WHERE 子句中使用的所有列上创建索引是一种好习惯吗
- javascript - 如何从 Angular 组件检测 iframe 内表单的更改?
- php - 如何从单个谷歌帐户的多个谷歌日历中获取所有事件?
- python - 在 NanoPi NEO Air 上使用 RPi.GPIO_NP python-lib 的问题
- command-line - 生成包含目录中文件名的 txt 文件时参数列表太长