10

我正在使用 ASP.NET 更新面板使用文本框的 on 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

4

2 回答 2

11
<asp:TextBox AutoPostBack="true" OnTextChanged="thingId_TextChanged" ID="thingId" runat="server"></asp:TextBox>

当焦点从文本框中丢失时,文本框上的AutoPostBack将触发回发。TextChanged事件将在任何后续回发时触发(可能是由于按钮单击或文本框焦点更改)。所以你需要确定

  1. 更改文本后,您将移出文本框
  2. 您更改的任何控件都是更新面板的一部分(可以是不同的更新面板)。如果没有任何更新面板的一部分,那么这些更改将不会反映在客户端。

我的猜测是你可能患有#2。您可以使用诸如 Fiddler(或 FireFox 上的 Firebug)之类的工具来检查当焦点从文本框中丢失时浏览器是否正在触发 AJAX (XHR) 请求。

于 2012-01-02T04:40:26.530 回答
4

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

如果你想解决这个问题,你可以给你的文本框一个客户端 onchanged事件处理程序,它的 JavaScript 将从Page.ClientScript.GetPostBackEventReference().

正确的解决方案是使用 JavaScript 代码中的 AJAX 方法调用,而不是UpdatePanelonchanged.

于 2012-01-02T07:20:30.150 回答