UpdatePanel,Timer和TexBox问题

时间:2011-05-04 21:23:26

标签: asp.net ajax timer updatepanel

<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 个答案:

答案 0 :(得分:1)

您应将计时器间隔设置为接近1000毫秒。这应该可以解决你的问题。

答案 1 :(得分:0)

当回发完成后,您可以运行一段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);
}

现在,当发生部分回发时,每次都会执行此脚本。尝试一下,让我知道它是否有助于解决问题。

答案 2 :(得分:0)

在更新面板中放置计时器将导致重复刷新该更新面板。您已将计时器间隔设置为300毫秒。这可能是问题所在。 你需要考虑什么 - 您真的想将计时器放在更新面板中吗? 你真的需要将间隔保持在300毫秒。 是不是可以将文本框移到updatepanel外面?