【发布时间】:2021-10-18 06:45:02
【问题描述】:
当用户按下特定按钮时,我需要在按钮内显示动画并禁用它(调用的方法需要几秒钟才能完成)。 这是我的html:
<div class="row">
<div class="col-lg-4">
@if (IsDownloading)
{
<button class="btn btn-primary float-right search disabled" disabled><span class='fa-left fas fa-sync-alt spinning'></span>Downloading...</button>
}
else
{
<button id="REC_PDF" class="btn btn-primary" @onclick="@(()=>getPDF())">Download Labels</button>
}
</div>
</div>
这是我的代码:
protected bool IsDownloading { get; set; }
public async Task getPDF()
{
IsDownloading = true;
StateHasChanged();
await generate_pdf(labels);
IsDownloading = false;
StateHasChanged();
}
private async Task generate_pdf(List<Tuple<string, string, string, string>> filtered_label)
{
loading = true;
string PDF_PATH = "./PDF/" + CurrentValue;
foreach (Tuple<string,string,string,string> label in filtered_label)
{
if (!Directory.Exists(PDF_PATH))
{
Directory.CreateDirectory(PDF_PATH);
}
.......
代码正在运行,但由 StateHasChanged() 调用的页面呈现;当 getPDF 方法(以及随之而来的 generate_PDF)完全执行时执行 2 次。
我需要在第一次调用时呈现页面以显示 css 加载动画。
(正如我在其他帖子中所建议的那样,我使用了 InvokeAsync(() => StateHasChanged()); 但不起作用)
谢谢。
【问题讨论】:
-
@onclick="@(()=>getPDF())"@onclick="getPDF" 是正确的方法...但不是您问题的原因。