Обновление панели обновления Возникла проблема, если пользователь пишет в то время - PullRequest
1 голос
/ 04 ноября 2010

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

Я вставил текстовое поле для отображения каждого текста, представленного пользователями, текст для записи и кнопка отправки отсутствуют. Это прекрасно работает, но если я пишу какой-то текст в точный момент времени обновления (лебедка часто происходит, потому что это происходит каждые 3 секунды), это не позволяет мне писать правильно, потому что текстовое поле мигает, и вы пропускаете письмо. Итак, что является правильным методом для этого, не теряя текучести написания.

Спасибо.

1 Ответ

1 голос
/ 04 ноября 2010

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

Вот код, который я пробовал, и он работает:

Aspx:

        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
        <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="2000" Enabled="True">
        </asp:Timer>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Button1_Clicked" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
            </Triggers>
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="" />
            </ContentTemplate>
        </asp:UpdatePanel>

И C #:

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Label1.Text = DateTime.Now.ToString();
    }

    protected void Button1_Clicked(object sender, EventArgs e)
    {
            Label1.Text = String.Format("{0}: {1}", DateTime.Now.ToString(), TextBox1.Text);
    }
...