【发布时间】:2018-09-06 16:37:26
【问题描述】:
更新:问题在于 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'。'
我试过不使用范围,在两个页面模型上都有它。 问题是我并不真正理解这里的问题,所以如果我没有给你足够的上下文或代码但问你是否需要更多,我很抱歉。
我想要做的是打印出用户投注列表。 提前致谢!
【问题讨论】:
-
async void通常最好避免使用,因为调用代码无法知道何时完成。例如。您的两个OnGetAsync方法都将在未来某个时间点设置GetBets或GetUsers属性。但我们无法发现何时完成,因此很可能您的更多代码很脆弱并受到数据竞争的影响。 -
就是这样,非常感谢!
标签: c# asp.net-core entity-framework-core razor-pages