如何使用异步任务更新我的.Net Core 3.1页面,因为各种任务正在顺序发生



我越来越习惯使用.Net Core,但对使用异步任务有一些"简单"的问题。

我已经通读了。MSDN/Microsot上网络应用程序Razor页面的网络教程,但我想弄清楚如何:

  1. 单击我的页面(页面为GetFiles.csGetFiles.cshtml.cs(上名为"的按钮;获取文件"-觉得这不难
  2. 按钮";获取文件"禁用并启动一系列后续任务-禁用按钮很简单,但如何调用任务
  3. 页面不进行完全刷新,但在任务完成时不断更新页面(附加文本(-对此不确定
    • 当按钮禁用时,下面的文本会显示类似";任务已启动">
    • 第一个任务开始并查询数据库,并且在查询之前将文本附加到上面作为";查询已启动";并附加在查询完成之后";查询结束">
    • 下一个任务开始并且文本被附加为"0";创建文件已启动";然后用上面的查询数据创建一个文件则当它完成时,文本被附加为"0";文件创建完成">

我看到这个方法:

public async Task<IActionResult> OnPostAsync()
{
// Do the x number of tasks and updates in here (number of tasks my vary depending on query results)

// return Page?
return ?
}

进行这样的进度/任务循环最简单的方法是什么?

Razor页面一次性生成页面的所有HTML,并将其作为响应发送到浏览器。在不结合其他技术的情况下,您不能发送HTML的一部分,然后递增地更新其他部分。如果有多个后台任务作为Razor页面执行的一部分运行,那么它们都必须在HTML呈现之前完成。

在初始页面呈现后,您可以使用SignalR根据服务器上的更改更新页面的部分内容,但使用客户端脚本对负责执行后台任务的命名处理程序方法进行各种异步调用(XmlHttpRequest或Fetch(,然后用对这些调用的响应更新页面的一部分可能会更简单。

就我个人而言,我会使用Fetch API来调用命名处理程序方法,这些方法为此返回部分视图(HTML片段(,或者如果web应用程序严重依赖于这一要求,我更有可能构建Blazor WebAssembly应用程序。

相关内容

  • 没有找到相关文章

最新更新