asp.net - usar - Desencadenar una actualización de UpdatePanel por un control que está en ContentPlaceHolder diferente
como utilizar el updatepanel (3)
En el archivo de código subyacente, debería poder hacer:
ScriptManager.RegisterAsyncPostBackControl(dropdown1);
Tengo una página con dos ContentPlaceHolders. Uno tiene un DropDown y otro UpdatePanel con contenido.
¿Cómo puedo activar la actualización de UpdatePanel mediante el evento selectedItemChanged de DropDown cuando se encuentran en ContentPlaceholders?
Lo siguiente no funcionaría ya que UpdatePanel1 no sabe acerca de DropDown1:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
Some content that needs to be updated here...
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDown1" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
Una forma es hacer un método de página Ajax que sería invocado por javascript en la página cuando se selecciona el elemento DropDown. Luego, en el código subyacente, dentro de ese método de página, llame a UpdatePanel1.Update ().
¿Hay una alternativa más fácil?
Desde http://msdn.microsoft.com/en-us/library/system.web.ui.asyncpostbacktrigger.aspx
El control al que hace referencia el AsyncPostBackTrigger debe estar en el mismo contenedor de nomenclatura que el panel de actualización para el cual es un disparador. Los desencadenantes que se basan en controles en otros contenedores de nombres no son compatibles.
La solución consiste en utilizar UniqueID del control al que hace referencia el desencadenador. Desafortunadamente, UniqueID no está calificado hasta que el control se haya agregado a su elemento principal (y su elemento principal se haya agregado a su elemento principal, en el árbol de control).
En tu código, intenta:
UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger()
{
ControlID = DropDown1.UniqueID,
EventName = "SelectedIndexChanged", // this may be optional
});
Puede forzar la actualización de cualquiera de las páginas UpdatePanels llamando al método updatePanel1.Update()
del lado del servidor. Por ejemplo, durante la actualización updatePanel1 en button1.Click
call updatePanel2.Update()
y se actualizarán ambos paneles.