我正在测试以下代码以显示数据,然后在一段时间后使用异步将其删除。
我遇到的问题是我想显示标签和文本,然后执行异步操作,但是异步操作在代码的第一部分之前运行。
有没有一种方法可以先运行代码,然后再进行异步等待?
<form id="form1" ondatabound="Page_Load()" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label" Visible="false"></asp:Label><br /><br />
<asp:Button ID="Button1" class="btn btn-error" OnClick="Button1_Click" runat="server" Text="Button" /><br /><br />
<asp:TextBox ID="TextBox1" ReadOnly="false" Text="" Visible="true" runat="server"></asp:TextBox><br /><br />
<asp:TextBox ID="TextBox2" ReadOnly="false" Text="" Visible="true" runat="server"></asp:TextBox><br />
</div>
</form>
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//TextBox1.Text = "TestEmail";
//TextBox2.Text = "TestPassword";
}
//When Button1 is clicked then show/hide the title label
protected void Button1_Click (object sender, EventArgs e)
{
if (Label1.Visible == false)
{
Label1.Visible = true;
Label1.Text = "Please use this link to login: www.test.com";
TextBox1.Text = "TestingData";
}
else
Label1.Visible = false;
ClearMessages();
}
public async Task SyncTest()
{
await Task.Delay(5000); // 5 second delay
this.ClearMessages();
}
protected void ClearMessages()
{
TextBox1.Text = "";
TextBox2.Text = "";
Label1.Text = "";
}
}
答案 0 :(得分:1)
我在评论中提到。呈现页面后,后端就不再与该页面建立连接,因此无法清空文本。解决此问题的更好方法是在客户端使用
调用脚本在客户端进行清理var data = []; // [] is an array
这将调用下面的方法,该方法将在5秒钟后清空textbox1。
Page.ClientScript.RegisterStartupScript(GetType(), "cleanText", "cleanText());", true);
答案 1 :(得分:0)
关于您的概念和问题:
...在一定时间后,使用
async
[或等待的Task
]删除[数据]。有没有一种方法可以[渲染页面],然后执行
async
await
?
据我所知,async
await
和Task
并没有跨Page Lifecycles的框架支持,更不用说在渲染/卸载页面上编写机制了,所以答案可能是否。
但是,使用ASP.NET AJAX Extensions对WebForm应用程序提供了异步支持。您可以使用Partial Page Updates实现所需的行为(以异步方式处理控件属性更改的代码)。