我一般是Web开发的新手,所以我怀疑我误解了剃须刀页面的核心前提。
我正在尝试在加载数据时向页面添加加载指示器。尽管这可以通过js promise来实现,但我假设我可以完全使用cshtml文件在c#中完成此操作。
在我的控制器中,我有一个Page模型,如下所示:
public Boolean IsLoading { get; set; } = true;
public async Task<IActionResult> OnGetAsync()
{
await Task.Run(() =>
{
Thread.Sleep(1000 * 10);
IsLoading = false;
});
return Page();
}
只是用来模拟昂贵的数据库查询的东西,以及用来指示何时完成加载的布尔值。
在我的页面文件中,我看起来像这样:
@if (@Model.IsLoading)
{
<div>
<img src="~/Images/loading.gif" />
</div>
}
else
{
<div>
<<Some Code Showing My Data>>
</div>
}
我已经尝试了多种方法来尝试更新模型或在数据提取完成后重新绘制页面,但是我一直找不到任何可行的方法。
所需的行为是使页面在“数据库查询”完成之前一直显示加载符号,然后显示数据。
我看到的当前行为是,直到“数据库查询”完成后,该页面才会显示。所以我从来没有看到加载的gif。
通常,如果该IsLoading
属性为true
,则应该看到加载图像。您没有看到它的原因是因为IsLoading
never true
。发生这种情况是因为您正在使用await
关键字。通过使用它,这部分代码:return Page();
仅在任务完成后才能到达。因此,当Page
返回对象时,IsLoading
属性为false
。
另外,要重申@LosManos的答案,不能在客户端上执行C#。因此,即使显示该图像,您仍然需要JavaScript来查询服务器以检查作业是否已完成并隐藏该图像。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句