Почему 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 ; 

код не будет срабатывать на textchanged но это будет, на ButtonClick или PageLoad.

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

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

2 ответов


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

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

  1. после изменения текста вы выходите из текстового поля
  2. любые элементы управления, которые вы меняете, являются частью панели обновления (может быть другая панель обновления). Если нет части какого-либо обновления панель, то эти изменения не будут отражены на стороне клиента.

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


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

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

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