Проблема с UpdatePanel, Timer и TexBox - PullRequest
1 голос
/ 05 мая 2011
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Always" >
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="300" ontick="Timer1_Tick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
<ContentTemplate>
</ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Send" />
</ContentTemplate>
</asp:UpdatePanel>

Проблема в том, что курсор TextBox1’s не мигает, он статичен, но вы можете написать в нем.Создается впечатление, что он замерз.Почему курсор не мигает?

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Вы должны установить интервал таймера около 1000 миллисекунд. Это должно решить вашу проблему с миганием.

0 голосов
/ 05 мая 2011

Размещение таймера внутри панели обновления приведет к повторному обновлению этой панели обновления.Так как вы установили интервал таймера в 300 миллисекунд.Это может быть проблемой.О чем нужно подумать - Вы действительно хотите разместить таймер на панели обновлений?Вам действительно нужно сохранить интервал в 300 миллисекунд.Разве не удастся переместить текстовое поле за пределы панели обновления?

0 голосов
/ 05 мая 2011

Когда постбэк завершится, вы можете запустить фрагмент JavaScript, который уберет фокус из текстового поля (например, он больше не будет принимать текст), а затем вы можете сразу же повторно сфокусироваться на текстовом поле (чтобы он принимал текст снова). Это может «сбросить» курсор, чтобы он правильно отображался.

Попробуйте добавить это в свой ASPX, желательно за пределами UpdatePanels:

<script type="text/javascript">
    function fixTextBoxFocus()
    {
        var textBox = document.getElementById("<%= TextBox1.ClientID %>");

        textBox.blur(); //Remove the focus from the text box.
        textBox.focus();//Re-focus on the textbox.
    }
</script>

И затем, в вашем коде (замените MyPage названием класса вашей страницы):

protected void Timer1_Tick(object sender, EventArgs e)
{
    this.ClientScript.RegisterStartupScript(typeof(MyPage), "fixTextBoxFocus", "fixTextBoxFocus();", true);
}

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

...