You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor C#实现按钮点击显示Saving…完成后恢复Save文本问题

问题解决:Blazor按钮点击后更新文本为“Saving…”不生效

你的代码问题在于Blazor没有在修改saveText后立即触发UI渲染,尤其是当_service.SaveAllTheCache()是同步方法或者没有让出线程的异步方法时,UI不会实时更新。以下是修复方案:

基础修复方案

在修改saveText后手动调用StateHasChanged()通知组件重新渲染:

<div>
    <button class="btn btn-primary" @onclick="SaveTheCache">@saveText</button>    
</div>

@code {
    private bool collapseNavMenu = true;

    private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    string saveText = "Save";

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }

    private async Task SaveTheCache()
    {
        saveText = "Saving...";
        StateHasChanged(); // 手动触发UI更新
        await _service.SaveAllTheCache();
        saveText = "Save";
    }
}

优化方案(防止重复点击)

添加状态变量禁用按钮,避免用户重复触发保存操作:

<div>
    <button class="btn btn-primary" @onclick="SaveTheCache" disabled="@isSaving">@saveText</button>    
</div>

@code {
    private bool collapseNavMenu = true;
    private bool isSaving; // 标记是否正在保存

    private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
    string saveText = "Save";

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }

    private async Task SaveTheCache()
    {
        isSaving = true;
        saveText = "Saving...";
        StateHasChanged();

        try
        {
            await _service.SaveAllTheCache();
        }
        finally
        {
            // 无论成功失败都恢复按钮状态
            saveText = "Save";
            isSaving = false;
        }
    }
}

特殊情况处理

如果SaveAllTheCache是长时间运行的同步方法,需要将它放到后台线程执行,避免阻塞UI:

private async Task SaveTheCache()
{
    isSaving = true;
    saveText = "Saving...";
    StateHasChanged();

    try
    {
        // 用Task.Run将同步操作移到后台线程
        await Task.Run(() => _service.SaveAllTheCache());
    }
    finally
    {
        saveText = "Save";
        isSaving = false;
    }
}

内容的提问来源于stack exchange,提问作者Rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:10:28