await InvokeAsync(StateHasChanged) 不会更改数据库内容,除非重新加载页面

问题描述 投票:0回答:1

我正在做非常基本的 CRUD Blazor Web 应用程序,我的创建和删除工作得很好,只要我在数据库中添加或删除项目,该项目就会立即在我的剃刀页面上更新。但当我使用更新方法时,我尝试了不同的方法,但没有任何效果。我真的不明白为什么创建和删除工作正常,但更新却不行?

我正在使用 onclick - 按钮调用方法。当用户单击“更新”/“创建”/“删除”时,将显示一个表单,询问您要删除或更新的记录的 ID。或者只是要求填写以创建新数据。

这是我的“创建”方法,它可以正常工作,只要用户按下“添加”按钮,就会显示包含数据库中数据的列表。

private async Task AddTrick()
{
await dr.Create(newTrick);
isVisibleCreate = false;
newTrick = new Tricks();
}

这是我的剃刀页面的更新方法:

private async Task LoadTrick(){
   trick = await dr.GetTrickByIdAsync(idTrick);
}

private async Task UpdateTrick(){
   await dr.Update(trick);
   isVisibleUpdate = false;
   trick = await dr.GetTrickByIdAsync(idTrick);
   await InvokeAsync(StateHasChanged);
}

这是我在另一个类中的 CRUD 方法

public async Task Create(Tricks trick)
{
_context.Trick.AddAsync(trick);
await _context.SaveChangesAsync();
}

public async Task Update(Tricks trick)
{
var t = await _context.Trick.FindAsync(trick.Id);

t.Description = trick.Description;
t.Name = trick.Name;
t.Length = trick.Length;
t.Done = trick.Done;

await _context.SaveChangesAsync();
}
c# blazor crud
1个回答
0
投票

从您发布的代码中我相信您错过了致电:

await _context.Trick.UpdateAsync(trick);

您在

AddAsync()
方法中调用了
Create()
。应在更新方法中包含 UpdateAsync()`,否则对象状态仅在内存中更改。

public async Task Create(Tricks trick)
{
    _context.Trick.AddAsync(trick);
    await _context.SaveChangesAsync();
}

public async Task Update(Tricks trick)
{
    var t = await _context.Trick.FindAsync(trick.Id);

    t.Description = trick.Description;
    t.Name = trick.Name;
    t.Length = trick.Length;
    t.Done = trick.Done;

    // You need this line
    await _context.Trick.UpdateAsync(t);

    await _context.SaveChangesAsync();
}
© www.soinside.com 2019 - 2024. All rights reserved.