2012-01-02 13 views
10

estoy usando un panel de actualización de ASP.NET para recuperar la información de usuario mediante el TextChanged en el cuadro de texto para, aquí es mi código:¿Por qué es un asp.net no OnTextChanged trabajando

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

y el código subyacente:

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

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

el código suele fuego sobre TextChanged pero wil, en ButtonClick o pageLoad.

¿Cuál es el problema?

mediante ASP.NET 4,0

+0

Si no puede resumir la pregunta adecuadamente en el título ... es probable que sea demasiado general o que no tenga el nivel adecuado de resolución de problemas. (En este caso, falta todo el contexto aplicable y una descripción adecuada de cómo "no funciona"). –

+0

¿Puede mostrar su función completa "userInfo"? –

+0

TextChanged no se activa con cada pulsación de tecla, si eso es lo que está buscando: http://stackoverflow.com/questions/826023/problem-with-textbox-inside-updatepanel-not-causing-ontextchanged-event y http: // stackoverflow.com/questions/1009086/how-to-make-an-asp-net-textbox-fire-its-ontextchanged-event-fire-in-an-ajax-upd. – patmortech

Respuesta

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

AutoPostBack en la caja de texto activará después de la vuelta cuando el foco se pierde en el cuadro de texto. El evento TextChanged se activará en cualquier subsiguiente publicación posterior (puede deberse a un cambio de foco de botón o de cuadro de texto). Así que hay que asegurarse de

  1. Después se cambia el texto, que se están moviendo fuera del cuadro de texto
  2. cualquier control que son cambios son parte de la actualización de pantalla (puede ser diferente panel de actualización). Si no hay parte de ningún panel de actualización, esos cambios no se reflejarán en el lado del cliente.

Supongo que probablemente sufras de # 2. Puede usar una herramienta como Fiddler (o Firebug en FireFox) para comprobar si el navegador está ejecutando una solicitud AJAX (XHR) cuando se pierde el foco del cuadro de texto.

+0

sí, mi problema era # 2, gracias – Wahtever

4

Como @VinayC publicado, AutoPostBack significa que la página se volverá a enviar al servidor cuando pierda el foco TextBox. Ningún evento incorporado provoca la devolución de datos en cada carácter agregado a una entrada de texto, y por una buena razón. Las devoluciones de UpdatePanel no hacen que la página parpadee, pero pueden ser tan pesadas como una devolución de datos completa.

Si desea evitar esto, se puede dar a su cuadro de texto de un controlador de eventos onchanged cliente, el código JavaScript de los cuales se construye a partir de Page.ClientScript.GetPostBackEventReference().

La solución correctasería el uso de un método de llamada AJAX a partir del código JavaScript en vez de una devolución de datos parcial en UpdatePanelonchanged.

Cuestiones relacionadas