2012-01-02 5 views
10

używam panelu aktualizacji ASP.NET do pobierania informacji o użytkowniku przy użyciu na TextChanged dla pola tekstowego, tutaj jest mój kod:Dlaczego jest asp.net nie OnTextChanged pracy

<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> 

i związany kod:

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

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

przyzwyczajenie ogień kod na TextChanged ale Wil, na ButtonClick lub pageload.

Na czym polega problem?

Korzystanie ASP.NET 4,0

+0

Jeśli nie możesz właściwie podsumować pytania w tytule ... prawdopodobnie jest zbyt ogólny lub nie ma odpowiedniego poziomu rozwiązywania problemów. (W tym przypadku brakuje większości kontekstów i odpowiedniego opisu, jak to "nie działa".) –

+0

Czy możesz pokazać swoją pełną funkcję "userInfo"? –

+0

Funkcja TextChanged nie uruchamia się za każdym naciśnięciem klawisza, jeśli tego szukasz: http://stackoverflow.com/questions/826023/problem-with-textbox-inside-updatepanel-not-causing-ontextchanged-event i http: // stackoverflow.com/questions/1009086/how-to-make-an-asp-net-textbox-fire-its-ontextchanged-event-fire-in-an-ajax-upd. – patmortech

Odpowiedz

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

AutoPostBack na pola tekstowego spowoduje post-plecy, gdy ostrość jest tracona w polu tekstowym. TextChanged wydarzenie zostanie uruchomione w dowolnym późniejszym odesłaniu (może to być spowodowane kliknięciem przycisku lub zmianą ostrości pola tekstowego). Więc trzeba mieć pewność

  1. Po tekst zostanie zmieniony, jesteś w ruchu z pola tekstowego
  2. Cokolwiek kontroluje, które to zmiany są częścią update-panelu (może być inny panel update). Jeśli nie ma części panelu aktualizacji, te zmiany nie zostaną odzwierciedlone po stronie klienta.

Zgaduję, że prawdopodobnie cierpisz na # 2. Możesz użyć narzędzia takiego jak Fiddler (lub Firebug na FireFox), aby sprawdzić, czy przeglądarka wysyła żądanie AJAX (XHR), gdy fokus zostanie utracony z pola tekstowego.

+0

tak, mój problem był # 2, dziękuję – Wahtever

4

Zgodnie z ogłoszeniem @VinayC, AutoPostBack oznacza, że ​​strona będzie ogłaszać zwrot do serwera po utracie koncentracji TextBox. Brak wbudowanego zdarzenia powoduje odświeżenie każdego znaku dodanego do tekstu i nie bez powodu. UpdatePanel Ogłaszanie zwrotne nie powoduje migotania strony, ale może być tak samo ciężkie jak pełny odświeżenie.

Jeśli chcesz obejść ten problem, można dać pole tekstowe do obsługi klientonchanged imprez, na których JavaScript zostanie zbudowany z Page.ClientScript.GetPostBackEventReference().

poprawne rozwiązaniem byłoby użyć metody wywołania AJAX z kodu JavaScript raczej niż UpdatePanel częściowego odświeżenie strony w onchanged.