Почему asp.net OnTextChanged не работает

Я использую панель обновления 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 ; 

код не будет запускаться в textheanged, но это wil, на ButtonClick или PageLoad.

В чем проблема?

Использование ASP.NET 4.0

Ответ 1

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

AutoPostBack в текстовом поле будет запускаться после возврата, когда фокус будет потерян из текстового поля. Событие TextChanged будет запущено на любом последующем пост-обратно (может быть связано с изменением фокуса на кнопке или текстовом поле). Поэтому вам нужно сделать определенные

  • После изменения текста вы перемещаетесь из текстового поля
  • Независимо от того, какие элементы управления вы меняете, они являются частью панели обновления (может быть другой панель обновления). Если в какой-либо панели обновления нет, эти изменения не будут отображаться на стороне клиента.

Мое предположение: вы, вероятно, страдаете от # 2. Вы можете использовать такой инструмент, как Fiddler (или Firebug on FireFox), чтобы проверить, запускает ли браузер AJAX (XHR) запрос, когда фокус потерян из текстового поля.

Ответ 2

Как сообщается @VinayC, AutoPostBack означает, что страница будет возвращена на сервер, когда ваш TextBox потеряет фокус. Никакое встроенное событие не вызывает обратную передачу для каждого символа, добавленного к текстовому вводу, и не без оснований. UpdatePanel postbacks не заставляют страницу мерцать, но они могут быть столь же тяжелыми, как полная обратная передача.

Если вы хотите обойти это, вы можете предоставить вашему текстовому окну клиентский обработчик событий onchanged, JavaScript которого будет построен из Page.ClientScript.GetPostBackEventReference().

Правильным решением было бы использовать вызов метода AJAX из вашего кода JavaScript, а не частичную обратную передачу UpdatePanel в onchanged.