首页 > 解决方案 > 异步删除显示数据的问题

问题描述

我正在使用以下代码进行测试以显示数据,然后在一段时间后使用异步将其删除。

我遇到的问题是我想显示标签和文本,然后执行异步但是异步在我的代码的第一部分之前运行。

有没有一种方法可以让我先运行代码然后执行异步等待?

<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 = "";
    }
}

标签: c#asp.netwebformsasync-await

解决方案


正如我在评论中提到的。一旦页面被渲染,后端就不再与页面连接,因此它不能清空文本。解决这个问题的更好方法是通过在客户端调用脚本来清理它

Page.ClientScript.RegisterStartupScript(GetType(), "cleanText", "cleanText());", true);

这将调用下面的方法,该方法将在 5 秒后清空 textbox1。

function cleanText(){
   setTimeout(function() { 
   var txt1 = document.getElementById('<%= TextBox1.ClientID %>');
   txt1.value = "";}, 5000);
}

推荐阅读