我正在设法在webforms页面的Page_Load方法中执行异步方法,而不阻塞用户的页面加载。我使用的代码如下:
C#代码在中的应用
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(AsyncDatabind));
}
private async Task AsyncDatabind()
{
await Task.Delay(5000);
Test.Text = "Hello!";
}
}ASPX视图
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AsyncTest._Default" Async="true"%>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:Label ID="Test" runat="server"></asp:Label>
</asp:Content>理想情况下,页面应该为用户加载,然后在异步任务完成后更新标签。因此,在设置标签文本之前,页面应该是可见的5秒。这有可能使用PageAsyncTask吗?
发布于 2015-07-28 14:03:08
正如法尔斯所指出的,这可以通过UpdatePanel来实现。
C#代码在中的应用
public partial class _Default : Page
{
public bool Loaded { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
}
private async Task AsyncDatabind()
{
await Task.Delay(5000);
Test.Text = "Hello!";
Loaded = true;
}
protected void Panel_Load(object sender, EventArgs e)
{
if(IsPostBack && !Loaded)
RegisterAsyncTask(new PageAsyncTask(AsyncDatabind));
}
}ASPX视图
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AsyncTest._Default" Async="true"%>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:UpdatePanel ID="Panel" ClientIDMode="AutoID" runat="server" OnLoad="Panel_Load">
<ContentTemplate>
<asp:Label ID="Test" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<script>
<%if(!Loaded){%> $(document).ready(function () { __doPostBack('Panel', ''); }); <%}%>
</script>
</asp:Content>发布于 2015-07-28 14:08:27
您页面中的所有服务器端代码,无论是否异步,都将执行,只有这样,结果才会呈现到HTML中并发送到客户端。所以对客户来说,你所做的毫无帮助。
相反,您想要关注的是首先将初始内容发送给客户端,然后使用AJAX向服务器发出后续请求。这在理想情况下意味着您的Page_Load或任何其他可能在初始请求上运行的方法中有尽可能少的方法。
与Joe不同的是,我不建议使用UpdatePanel,因为这会给您带来更多的麻烦。相反,学习使用较低的AJAX抽象,例如jQuery AJAX、Zepto.js AJAX或角的HTTP服务。要使服务器响应这些请求,请实现ASP.NET网络API或HTTP处理程序。
您会发现,单页应用程序中使用的许多技术都很方便,但您不必完全使用SPA才能实现目标。

https://stackoverflow.com/questions/31677875
复制相似问题