当AutoPostBack为true时,OnTextChanged失去焦点

时间:2013-05-31 20:51:01

标签: asp.net

我有一个ASP.Net webform,它有几个文本框。某些文本框具有OnTextChanged事件,AutoPostBack设置为true。

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

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

当当前文本框的OnTextChanged事件触发时,是否有任何可以使下一个对象保持焦点的事情?

2 个答案:

答案 0 :(得分:4)

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

使用Page.SetFocus

Page.SetFocus(IdOfControl);

但是,如果可以,我宁愿不回复。您输入所有必要数据后,是否无法使用用户必须单击的按钮?

答案 1 :(得分:4)

一种选择是使用<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>