3

我有一个包含多个文本框的 ASP.Net 网络表单。一些文本框有一个 OnTextChanged 事件,其中 AutoPostBack 设置为 true。

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

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

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

4

2 回答 2

4

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

使用Page.SetFocus

Page.SetFocus(IdOfControl);

但是,如果可以的话,我宁愿不回发。您不能使用用户在输入所有必要数据后必须单击的按钮吗?

于 2013-05-31T20:53:53.677 回答
4

一种选择是使用<asp:UpdatePanel>控制。

关于使用它的事实:

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

这是一个例子:

<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>
于 2013-05-31T22:24:13.797 回答