2011-11-23 23 views
6

Considere el siguiente código:¿Cómo desencadenar un UpdatePanel por un control TextBox?

<label>Search:</label><asp:TextBox runat="server" ID="search" ClientIDMode="Static" OnKeyUp="$('#searchButton').click();" /><asp:Button runat="server" ID="searchButton" ClientIDMode="Static" /> 
<asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:GridView runat="server" DataSourceID="EntityDataSource1" 
      AllowPaging="True" AllowSorting="True" AutoGenerateColumns="true" PageSize="20" 
      Width="400" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="searchButton" /> 
    </Triggers> 
</asp:UpdatePanel> 

El botón se activará una actualización del panel. Quería activar una actualización mediante una selección del campo de búsqueda, así que estoy 'fingiendo' con una declaración jQuery que hace clic en el botón. Me pregunto ... debe haber una mejor manera ... ¿verdad?

+0

Puede ser que esto te ayude http://stackoverflow.com/questions/1009086/how-to-make-an-asp-net-textbox-fire-its-ontextchanged-event-fire-in-an -ajax-upd – coder

+0

@Kiran el campo de búsqueda está fuera del panel de actualización, lo que hace que sea una diferencia que cuestione 1009086, porque si uso un envío automático la página será enviada. Tal vez Remy tenga razón y debería escribir mi propio control para eso ... –

+0

Sí, yo también estoy de acuerdo. Como también estoy trabajando ahora en la misma cosa, él puede estar en su derecho. – coder

Respuesta

3

Usted puede hacer esto para refrescar la UpdatePanel sin el botón:

<script type="text/javascript"> 

    function refreshPanel() { 
     __doPostBack('<%= updatePanel.UniqueID %>', ''); 
    } 

</script> 
<label>Search:</label> 
<asp:TextBox runat="server" ID="search" 
       ClientIDMode="Static" OnKeyUp="refreshPanel();" /> 
<asp:UpdatePanel runat="server" ID="updatePanel"> 

Sólo necesita proporcione a su panel de actualización una ID (panel de actualización aquí)

Ejecute ese código en una tecla o siempre que esté listo para ello.

+0

Envía la página. Me gustaría hacer una publicación de AJAX que no provoque la actualización de la página. –

+0

Resulta que el <% %> no se puede establecer en la propiedad OnKeyUp :( –

+0

@ KeesC.Bakker: Simplemente ponga el código en una función separada y llame a esa función en su teclado. –

1

El enlace es un poco outdates, pero debería hacer casi lo que quiere:
http://remy.supertext.ch/2007/06/see-search-results-as-you-type-an-aspnet-ajax-control/

+0

Hm ... Esperaba que .Net tuviera algo inteligente en su caja de herramientas ... –

+0

No es que lo sepa, pero mi código hace más o menos lo que necesita, ¿no? – Remy

+0

Sí. Me gustaría fusionar el DelayedSubmitExtender y el TextBox en uno de control, por lo que puede funcionar conjuntamente como una opción desencadenante. –

Cuestiones relacionadas