2009-02-02 51 views
12

Tengo un UserControl con un número de cascada DropDownList s en él. Seleccionar de la lista 1 habilita la lista 2, que a su vez habilita la lista 3. Una vez que haya hecho una selección en las tres listas, puede pasar a la página siguiente.Actualizar un control fuera del UpdatePanel

Las DropDownList están dentro de un UpdatePanel. Pero el botón "Página siguiente" está fuera del UpdatePanel. Ese botón debe deshabilitarse hasta que las tres listas tengan una selección, y luego debe habilitarse de nuevo. Pero como el botón está fuera del UpdatePanel, no se actualiza cuando hago selecciones. (Editar: El botón "Página siguiente" está en una página que también contiene el UserControl.)

Yo sé una manera de resolver esto:

var scriptManager = ScriptManager.GetCurrent(this.Page); 
scriptManager.RegisterPostBackControl(dropDownList1); 
scriptManager.RegisterPostBackControl(dropDownList2); 
scriptManager.RegisterPostBackControl(dropDownList3); 

Esto asegura una devolución de datos cuando cualquier lista desplegable está cambiado, para que el botón pueda actualizarse. Pero si hago esto, podría simplificar al deshacerme del UpdatePanel en primer lugar.

¿Existe alguna otra forma, a través de algún JavaScript inteligente o algo así, de que pueda actualizar un control fuera de UpdatePanel sin tener que renunciar a Ajax?

Respuesta

6

¿No podría agregar un panel de actualización alrededor de la "página siguiente" y luego agregar un activador al panel de actualización de la lista desplegable para activar el siguiente panel de actualización de la página?

Simplemente tirar las ideas, sin realmente haber probado :)

+0

Esto es lo más cercano a lo que tenía que hacer. En lugar de un disparador, simplemente tuve que llamar a un método en la página principal (lanzando esta página) para configurar el botón Siguiente correctamente. También tuve que RegisterPostBackControl en el botón Siguiente para que funcione dentro de UpdatePanel. –

1

Idealmente, esto se llevaría a cabo en javascript, con una comprobación de validación del lado del servidor en el controlador de eventos click.

Un ejemplo rápido jQuery:

//assuming the dropdowns all have the css class "cascade" 
$('select.cascade').change(function() { 
    If ($('option:selected',this).length == 3) { 
    $('input[id$=btnNext]').removeAttr('disabled'); 
    } 
}); 
12

Publicar un UpdatePanel alrededor del botón siguiente y crear un disparador para cada uno de los menús desplegables de forma que se dispare una devolución de datos asincrónica. Ej:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList1" /> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList2" /> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList3" /> 
</Triggers> 
2

puede upddate un control fuera del panel de actualización colocándolo en update_panel2 y diciendo update_panel2.update().

Tenga en cuenta que el UpdateMode del UpdatePanel debe configurarse en conditional para que esto funcione.

+0

lo creas o no, esto realmente funcionó para mí. Gracias amigo –

Cuestiones relacionadas