我正在使用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
答案 0 :(得分:11)
<asp:TextBox AutoPostBack="true" OnTextChanged="thingId_TextChanged" ID="thingId" runat="server"></asp:TextBox>
当文本框中的焦点丢失时,文本框上的 AutoPostBack将触发回发。任何后续回发都会触发TextChanged
事件(可能是由于按钮单击或文本框焦点更改)。所以你需要确定
我的猜测是你可能患有#2。您可以使用Fiddler(或FireFox上的Firebug)等工具来检查当文本框中的焦点丢失时浏览器是否正在触发AJAX(XHR)请求。
答案 1 :(得分:4)
正如@VinayC发布的那样,AutoPostBack
表示当TextBox
失去焦点时,页面将回发到服务器。没有内置事件会导致对添加到文本输入的每个字符进行回发,这是有充分理由的。 UpdatePanel
回发不会导致页面闪烁,但它们可能与完整回发一样重。
如果您想解决此问题,可以为文本框提供一个客户端 onchanged
事件处理程序,其JavaScript将从Page.ClientScript.GetPostBackEventReference()
构建。
正确的解决方案是使用JavaScript代码中的AJAX方法调用,而不是UpdatePanel
中的onchanged
部分回发。