¿Cómo obtengo un botón que está dentro de un asp: UpdatePanel para actualizar toda la página?

StackOverflow https://stackoverflow.com/questions/221595

Pregunta

Tengo un botón dentro de un panel de actualización que me gustaría actualizar toda la página. He configurado ChildrenAsTriggers = " false " y UpdateMode = " Condicional " .

Aquí tengo un código de ejemplo que demuestra mi problema.

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" />
      <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" />
   </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="mySecondPanel" runat="server">
   <ContentTemplate>
       <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label>

Y el código detrás:

protected void myFirstButton_Click(object sender, EventArgs e)
{
  myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss");
}
protected void mySecondButton_Click(object sender, EventArgs e)
{
  mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss");
}

Quiero actualizar la etiqueta que no está dentro de un panel de actualización cuando se hace clic en el segundo botón. El segundo botón debe estar en un panel de actualización. No quiero poner la etiqueta en un panel de actualización.

¿Fue útil?

Solución

Intente agregar un Desencadenador PostBack al primer Panel de Actualización, para el segundo botón. Eso le dirá a ese panel de actualización, que el botón debe hacer una devolución completa.

Otros consejos

ScriptManager.GetCurrent (Page) .RegisterPostBackControl (button); solucionará tu problema

Si agrega un PostBackTrigger al primer panel de actualización como tal

<Triggers>
   <asp:PostBackTrigger ControlID="mySecondButton" />
</Triggers>

Esto hará que se produzca una devolución completa de la publicación cuando se haga clic en el segundo botón. Este es el comportamiento exacto que estaba buscando.

Tuve un caso similar pero un poco más complejo y me tomó más de un día resolver esta respuesta. (La respuesta es esencialmente la misma que da @serkan. Solo estoy expandiéndome). Tuvimos un control de usuario de ASP.NET que tenía un botón que, al hacer clic, generaba una imagen y activaba una descarga de la imagen. . Esto funcionó a la perfección en una página normal, pero no en absoluto cuando el control de usuario se integró en un panel de actualización. No pude averiguar cómo decirle al panel de actualización que haga una devolución normal solo para este botón, especialmente porque el botón estaba dentro del control del usuario sin un acceso evidente desde la página que lo usa.

Lo que finalmente funcionó fue extremadamente simple. No hubo necesidad de intentar especificar el desencadenante de devolución para el panel. Más bien, en la carga de carga de página del control de usuario, agregué lo siguiente:

    protected void Page_Load(object sender, EventArgs e)
    {
        // If the chart is within an update panel then we need to tell the script manager
        // to not do an asynch postback on chartdownload.  If we don't, the download
        // doesn't work.
        var scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterPostBackControl(ChartSaveButton);
        }
        // Rest of Page_Load followed here...

Además, creé la propiedad ChartSaveButton para acceder fácilmente al control del botón:

    private Control ChartSaveButton
    {
        get { return FindControl("btnDownloadChart"); }
    }

(" btnDownloadChart " es el ID del botón.)

Fue un camino doloroso para llegar hasta aquí, pero me complace que la solución sea tan elegante. Espero que esto te ayude.

para mí, esta configuración no tiene sentido. tenga en cuenta que si bien los paneles de actualización pueden ser una excelente manera de lograr un efecto similar al ajax con mucha facilidad, no son ideales en todas las situaciones.

Si la arquitectura de su página requiere la disposición de los elementos como lo ha hecho en su ejemplo, puede que sea mejor que utilice la página o los métodos de servicio con javascript para actualizar la etiqueta.

Si la etiqueta no está en un panel de actualización, la única forma de actualizar el valor es actualizando la página completa como en una devolución de datos normal. Tendría que hacer una redirección a la misma página para actualizarla. El marco ajax sabe manejar las redirecciones incluso si la solicitud proviene de un panel de actualización, así que simplemente haga un Response.Redirect (...) en el botón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top