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((。
尝试将属性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>