ASP.NET 更新面板计时器更新,失去文本框上的焦点

本文关键字:更新 文本 焦点 失去 NET 计时器 ASP | 更新日期: 2023-09-27 18:34:28

我的屏幕上有2个更新面板。一个有一个文本框,另一个是网格视图。我有一个计时器(在 UpdatePanel 之外(,每 5 秒刷新一次网格视图。包含文本框的 UpdatePanel 有一个按钮(在 UpdatePanel 之外(,当按下文本框中输入的内容时,文本框中输入的内容将被添加到数据库中,文本框被清除,所有这些都通过 UpdatePanel (ajax,没有页面加载(。

我遇到的问题是,当链接到计时器并刷新网格视图的 UpdatePanel 时,它会将焦点从文本框中窃取出来。我可以通过添加codebdehind"System.Web.UI.ScriptManager.GetCurrent(this("来关注它。SetFocus(this.txtNewComment(;",但这会将光标放在文本框的开头。如果我正在键入某些内容,它会搞砸我正在键入的内容,因为光标位于开头而不是结尾。

关于如何在计时器触发 UpdatePanel 时将光标准确保持在文本框中的位置的任何想法?

通常,您会使用此处(http://msdn.microsoft.com/en-us/library/ms752349.aspx(所述的文本框的Select()函数,但MS按钮的 ASP.NET 中似乎不存在Select((。

ASP.NET 更新面板计时器更新,失去文本框上的焦点

尝试将属性UpdateMode="Conditional"设置为两个 UpdatePanel

在下面的示例中,文本框不会失去焦点。

<asp:UpdatePanel ID="TextBoxUpdatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:TextBox ID="PanelTextBox" runat="server"></asp:TextBox>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Literal ID="TimeLiteral" runat="server"></asp:Literal>
        <asp:Timer ID="myTimer" runat="server" OnTick="myTimer_Tick">
        </asp:Timer>
    </ContentTemplate>
</asp:UpdatePanel>

和背后的代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack) {
        PanelTextBox.Focus();
        myTimer.Interval = 3000;
        myTimer.Enabled = true;
    }
}
protected void myTimer_Tick(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(2000);
    TimeLiteral.Text = DateTime.UtcNow.Ticks.ToString();
}

将文本框放在 UpdatePanel 之外。

<asp:TextBox ID="PanelTextBox" runat="server"></asp:TextBox>
<asp:UpdatePanel ID="TextBoxUpdatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
      ...
    </ContentTemplate>
</asp:UpdatePanel>