ASP.NET OnTextChanged不从更新面板内部触发

时间:2012-01-02 02:08:21

标签: asp.net updatepanel textchanged

我正在使用ASP.NET更新面板使用textChanged为文本框检索用户信息,这是我的代码:

<asp:UpdatePanel runat="server" ID="up1" ChildrenAsTriggers="true">
<ContentTemplate>
    <asp:TextBox runat="server" ID="loginEmail" Text="Email" 
        CssClass="textBoxes" OnTextChanged="userInfo" AutoPostBack="true"></asp:TextBox>
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="loginEmail" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>

和背后的代码:

string url, emailInfo;
emailInfo = loginEmail.Text;
url = Membership.GetUserNameByEmail(emailInfo);

emailText.InnerText = "Email: " + emailInfo;
urlText.InnerText = "Webiste: http://www.Elwazefa.com/User/" + url ; 

代码不会触发textchanged ,但它会, 在ButtonClick或PageLoad上。

有什么问题?

使用ASP.NET 4.0

2 个答案:

答案 0 :(得分:11)

<asp:TextBox AutoPostBack="true" OnTextChanged="thingId_TextChanged" ID="thingId" runat="server"></asp:TextBox>
当文本框中的焦点丢失时,文本框上的

AutoPostBack将触发回发。任何后续回发都会触发TextChanged事件(可能是由于按钮单击或文本框焦点更改)。所以你需要确定

  1. 更改文字后,您将退出文本框
  2. 您更改的控件是更新面板的一部分(可以是不同的更新面板)。如果没有任何更新面板的部分,那么这些更改将不会反映在客户端。
  3. 我的猜测是你可能患有#2。您可以使用Fiddler(或FireFox上的Firebug)等工具来检查当文本框中的焦点丢失时浏览器是否正在触发AJAX(XHR)请求。

答案 1 :(得分:4)

正如@VinayC发布的那样,AutoPostBack表示当TextBox失去焦点时,页面将回发到服务器。没有内置事件会导致对添加到文本输入的每个字符进行回发,这是有充分理由的。 UpdatePanel回发不会导致页面闪烁,但它们可能与完整回发一样重。

如果您想解决此问题,可以为文本框提供一个客户端 onchanged事件处理程序,其JavaScript将从Page.ClientScript.GetPostBackEventReference()构建。

正确的解决方案是使用JavaScript代码中的AJAX方法调用,而不是UpdatePanel中的onchanged部分回发。