Проблема с асинхронным удалением отображаемых данных - PullRequest
0 голосов
/ 26 августа 2018

Я тестирую с помощью следующего кода для отображения данных, а затем удаляю их через определенное время, используя асинхронный вызов.

Проблема, с которой я столкнулся, заключается в том, что я хочу отобразить метку и текст, а затем выполнитьasync, однако async выполняется до первой части моего кода.

Есть ли способ, которым я могу сначала выполнить код, а затем выполнить async await?

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

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

относительно вашей концепции и вопроса:

... удалить [данные] через определенное время, используя async [или ожидаемое Task].

Есть ли способ, которым я могу [визуализировать страницу] и затем сделать async await?

, насколько мне известно, нет поддержки фреймворка дляasync await и Task для пересечения Жизненные циклы страниц , не говоря уже о создании механизмов на странице, отображаемой / выгруженной, поэтому ответ, скорее всего, нет .


Однако существует асинхронная поддержка приложений WebForm с ASP.NET AJAX Extensions .Вы можете достичь желаемого поведения (код для обработки изменений свойств элемента управления асинхронным способом) с помощью Частичное обновление страницы .

0 голосов
/ 26 августа 2018

Как я уже упоминал в комментарии.Как только страница отрисована, бэкэнд больше не имеет связи со страницей, поэтому не может очистить текст.Лучший способ решить эту проблему - очистить его на клиентской стороне, вызвав скрипт на клиентской стороне с помощью

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

, при этом метод, приведенный ниже, вызовет очистку textbox1 через 5 секунд.

function cleanText(){
   setTimeout(function() { 
   var txt1 = document.getElementById('<%= TextBox1.ClientID %>');
   txt1.value = "";}, 5000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...