Create 哪个调用 protected async Task OnCreateItem() {-6ren">
gpt4 book ai didi

.net-core - 无法访问 Blazor Server 3.0 中已处置的对象

转载 作者:行者123 更新时间:2023-12-04 10:53:37 26 4
gpt4 key购买 nike

我有一个带有以下表单提交按钮的 Blazor 页面

<button type="submit" class="btn btn-primary" @onclick="@(async()=> await OnCreateItem())">Create </button>

哪个调用

protected async Task OnCreateItem()
{
try
{

var result = await dbMgr.CreateAsync(item);
}
catch (Exception ex)
{
Throws ==> Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose()...
}
}

dbMgr被注入(inject)页面

@inject DBManager dbMgr;

经理实现为

class DBManager 
{
...
public DBManager(DBContext db)
{
_db = db;
}

public async Task<int> CreateAsync(ItemModel obj)
{
await _db.AddAsync(obj);
return await _db.SaveChangesAsync()
}
}

启动类是

public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddDbContext<DBContext >(options =>
options.UseSqlServer(Configuration.GetConnectionString("DBContext")), ServiceLifetime.Scoped);
services.AddScoped<DBManager>();
}

我在这里读了类似的问题 Link 1 Link 2

没用。

不确定我做错了什么。

最佳答案

我没有尝试你的代码,但我猜这是由于在

中设置了 type="submit"
<button type="submit" class="btn btn-primary" @onclick="@(async()=> await OnCreateItem())">Create </button>

因此,当您点击“创建”按钮时,会发生传统的回发。 .. 也就是说,您的 SPA 应用程序回发到服务器。它不应该发生(在那种情况下),因为您的应用程序重定向到限制基本 uri 之外的 uri,然后返回,很遗憾地发现 OnCreateItem 中的对象已死(已处置)。只需设置 type="button"。

重要提示:据我记忆过去的日子,Blazor JavaScript 中应该有代码来防止此类事件:即回发到服务器。

关于.net-core - 无法访问 Blazor Server 3.0 中已处置的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59338346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com