2009-05-05 23 views
12

Tengo la siguiente situación: Tengo un cuadro de texto dentro de un panel de actualización de Ajax. Dondequiera que el usuario escriba en el cuadro de texto, debo mostrar un mensaje (mensaje diferente que depende de los datos escritos por el usuario).Problema con el cuadro de texto dentro de updatepanel: no se produce el evento OnTextChanged

 <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> 
     <ContentTemplate> 
      <asp:TextBox ID="txtMyTexbox" runat="server" Width="500px" OnTextChanged="txtMyTexbox_TextChanged" AutoPostBack="true"></asp:TextBox> 
      <br /> 
      <asp:Label ID="lblMessage" runat="server" CssClass="errorMessage" Visible="false">Hello World</asp:Label> 
     </ContentTemplate> 
      <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="txtMyTexbox" /> 
      </Triggers> 
     </asp:UpdatePanel> 

En el lado del servidor que he escrito lo siguiente en la página de carga

ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(txtMyTexbox);   

y el método como éste

protected void txtMyTexbox_TextChanged(object sender, EventArgs e) 
    {   
      if (.....) 
      { 
       lblMessage.Visible = false; 
      } 
      else 
      { 
       lblMessage.Visible = true; 
      }    
    } 

Mi problema ahora es que: cuando el usuario escribe en el cuadro de texto no causa el evento OnTextChanged.

¿Echo de menos algo?

+0

nota: Sólo cuando me golpeó 'Tab' o 'Enter' evento que causa OnTextChanged – DaDa

Respuesta

5

establecer la propiedad EventName para su txtMyTexbox AsyncPostBackTrigger a TextChanged

<Triggers>    
    <asp:AsyncPostBackTrigger ControlID="txtMyTexbox" EventName="TextChanged" />    
</Triggers> 

Otros sugguestion:

has necesitado mirar el control de AutoComplete que forma parte del AjaxControlToolKit? Se comporta de la misma manera que quieres que se comporte tu solución.

+0

gracias, pero la situación sigue siendo la misma. – DaDa

6

No estoy seguro de que su problema tenga algo que ver con el UpdatePanel.

De hecho, el evento TextChanged no se activa mientras se escribe. Solo se activará después de el cuadro de texto pierde el foco. Esto sucede directamente si AutoPostBack está establecido en True, o cuando se produce la siguiente devolución de datos. Consulte los documentos para AutoPostBack property y TextChanged event.

Afaik, su mejor opción es probablemente manejar el evento keyup en javascript.

Aquí está un ejemplo simple de jQuery:

$(document).ready(function() { 
    $(':text[id$=YourTextBox]').keyup(function() { 
     if ($(this).val() === "your special value") { 
      $('span[id$=YourLabel]').css('visibility', 'visible'); 
     } 
     else { 
      $('span[id$=YourLabel]').css('visibility', 'hidden'); 
     } 
    }); 
}); 
0

un cheque solución de texto - propiedad CausesValidation y la ponemos a true

1

su strnage saber que, incluso después de la adición de panel de actualización/AsyncPostBackTrigger, cuadro de texto ChangeEvent doesn' t funciona correctamente Algunas veces funciona y otras veces no ... Ya que es una llamada Asychronous, tenemos que actualizar un poco el tiempo, o esperar o impredecible, Hopes Microsoft va a llegar con una competente ... A continuación hay una manera fácil de verificar el nombre de usuario bastante bueno

------ Bajo Load - aspx.cs -----------------------

this.TextBox1.Attributes.Agregar ("onKeyUp", "fnUNameSubmit (this);");

------- en aspx -add script ---------------------------------- -----

<script language="javascript" type="text/javascript"> 

function fnUNameSubmit(urInput) { 
var inpt= urInput.value; 
if (inpt.length > 21) { 
document.getElementById('<%= TextBox1.ClientID %>').style.backgroundColor = "green"; 
document.form1.submit(); // This is only trick we use here.. 
} 
else { 
document.getElementById('<%= TextBox1.ClientID %>').style.backgroundColor = "red"; 
} 
    } 
</script> 

------- en aspx -add script -------------------------- ------------- ---------------- aspx.cs ---------------- --- if (TextBox1.Text.Length> 21) { CheckUsrName(); Label2.Text = ""; } else { Label2.Text = "La longitud es inferior a 21"; // vamos a hacer algunas cosas ... bla..bla } ----------------------------------- -------------- CheckUsername()

público CheckUsrName void() {

Call dB values 

} 
0

el control que se utiliza id en AsyncPostBackTrigger debe estar fuera del panel de actualización (que causa al fuego la llamada asíncrono) así:

<tr> 
    <td colspan="4"><asp:Label ID="lblEnter_Successfully" Text="Enter Record SuccessFully" runat="server" Visible ="false" ForeColor ="Blue" Font-Size ="Larger" Font-Bold ="true"></asp:Label> 
    </td> 
</tr>           
</table>     
</ContentTemplate> 

    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID = "Button_Save" EventName ="Click"/> 
    </Triggers>      

</asp:UpdatePanel> 
      <table> 
       <tr> 
       <td width = "472px" align ="right">    
        <asp:Button ID="Button_Save" runat="server" Text="Save" OnClientClick ="return URLValidation();"/> 
        <asp:Button ID="Button_Clear" runat="server" Text="Clear"/> 
       </td> 
       </tr> 
      </table> 
Cuestiones relacionadas