2013-05-31 96 views
3

我有一个ASP.Net webform有几个文本框。某些文本框具有AutoPostBack设置为true的OnTextChanged事件。当AutoPostBack为真时OnTextChanged失去焦点

当用户输入一些文本并离开文本框时,我想要运行一些代码。这部分工作正常。

问题是如果用户输入一些文本,然后单击或选项卡到另一个文本框,当前文本框事件的OnTextChanged触发正常,但用户单击的文本框不保持焦点。这会导致问题,因为用户认为他们在下一个文本框,但他们不是。没有任何物体似乎有重点。

有什么办法可以使下一个对象在当前文本框的OnTextChanged事件触发时保持焦点?

回答

3

一个选项是使用<asp:UpdatePanel>控制。

事实有关使用它:

  • 回发请求将经由AJAX制成。
  • 它不会重新创建整个页面的HTML。
  • 当UpdatePanel更新时,它将替换DIV innerHTML,这会使文本框失去焦点(坏点)。
  • 为了保持焦点,当文本框回发时,您必须避免更新UpdatePanel。
  • 您可以通过设置UpdateModeChildrenAsTriggers属性来避免更新。

下面是一个例子:

<asp:UpdatePanel ID="uppTextboxes" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
    <ContentTemplate> 
     <asp:TextBox ID="txb1" runat="server" AutoPostBack="true" OnTextChanged="txb1_OnTextChanged" /> 
     <asp:TextBox ID="txb2" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
4

由于整个页面在服务器端回发时重新创建,浏览器将重新创建客户端上的所有html,所以您必须告诉ASP.NET您的TextBox需要关注。

使用Page.SetFocus

Page.SetFocus(IdOfControl); 

不过,我不希望在所有的,如果我能回传。你不能使用用户在输入所有必要数据后点击的按钮吗?

+0

同意在回发。 jQuery也是一个选项... –

+0

运行计算OnTextChanged和其他文本框的值已更新。除了我描述的问题之外,表单非常有用。 – Jerry