更新:问题是OnGet方法是异步的。谢谢大家的帮助和投入!
在我的第一页(主页)中,我获得了用户列表:
HomePageModel:
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”。
我试过不用范围,在两个页面模型上都使用了范围。 问题是我在这里并不真正理解问题,所以很抱歉,如果我没有为您提供足够的上下文或代码,而是询问您是否需要更多。
我想做的是打印出用户投注清单。 预先感谢!
答案 0 :(得分:2)
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
实现)。