Pregunta

Estoy seguro de que esto es fácil pero no puedo entenderlo:

Tengo una página ASP.NET con algunos UpdatePanels.quiero que la pagina completamente cargue con algún texto de 'Espere' en UpdatePanels.Luego, una vez que la página esté completamente cargado Quiero llamar a una función de código subyacente para actualizar UpdatePanel.

¿Alguna idea sobre qué combinación de Javascript y código subyacente necesito para implementar esta idea?

SAL

PD:Intenté poner mi llamada de función en Page_Load pero luego se ejecuta el código antes la página se entrega y, como la función que quiero ejecutar lleva algún tiempo, la página simplemente tarda demasiado en cargarse.

¿Fue útil?

Solución

Utilice un control de temporizador que se activará después de una cierta cantidad de milisegundos (para que se cargue la página).En el evento de tic del temporizador, actualice el panel de actualización.

Otros consejos

Jugué con las sugerencias de ScriptManager, que creo que eventualmente habría hecho funcionar, pero me parece que la idea del Timer es más fácil de implementar y en realidad (!) no es un gran truco.

Así es como actualicé mi panel después el renderizado de la página inicial estaba completo...

predeterminado.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAXPostLoadCall._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <h2>And now for a magic trick...</h2>
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True">
        </asp:ScriptManager>
        <div>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Timer ID="Timer1" runat="server" Interval="2000" ontick="Timer1_Tick" />
                    <asp:Label ID="Label1" runat="server">Something magic is about to happen...</asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>

        </div>
    </form>
</body>
</html>

y el código detrás de default.aspx.cs dice

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace AJAXPostLoadCall
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        public void DoMagic()
        {
            Label1.Text = "Abracadabra";
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            // Do the magic, then disable the timer
            DoMagic();
            Timer1.Enabled = false;
        }

    }
}

Entonces, la página se carga y el temporizador (contenido dentro del UpdatePanel) se activa 2 segundos después de que la página se haya cargado (creo que no estoy seguro de cuándo comienza realmente el temporizador).El texto de la etiqueta se reescribe y luego el temporizador se desactiva para detener más actualizaciones.

Bastante simple, pero ¿pueden ustedes, puristas, decirme si se trata de un truco horrible?

Mira esto ScriptManager.RegisterStartupScript

La idea es que registres un script para ejecutarlo al inicio (creo que una vez que la página se haya cargado).Su secuencia de comandos debe llamar a una función que provoque una publicación a través de su UpdatePanel

Hacer cosas como esta con UpdatePanels en lugar de algo fácilmente comprensible te molestará, es solo una cuestión de cuándo.

Desde la primera pregunta de esta publicación, creo que lo que el usuario busca es un mensaje que se le mostrará mientras se carga el panel de actualización.Simplemente coloque un control UpdateProgress como el que se muestra a continuación en su página, justo encima de su control UpdatePanel, y siéntase libre de activar un evento en su UpdatePanel, coloque su código de backend como de costumbre y todo lo que esté contenido dentro del control UpdateProgress se cargará mientras su UpdatePanel El contenido se está procesando en el backend.

<asp:UpdateProgress AssociatedUpdatePanelID="UpdatePanel1" ID="UpdateProgress1" runat="server">
  <ProgressTemplate>
    <div class="mystyleclass">
      Please Wait...
    </div>
  </ProgressTemplate>
</asp:UpdateProgress>

No hay necesidad de ningún material javascript manual complicado.

ScriptManager.RegisterStartupScript permite que se ejecute un script al inicio dentro de un panel de actualización.Si utiliza el antiguo ClientScript.RegisterStartupScript, el script que renderice estará fuera de los límites del panel de actualización y, por lo tanto, no se ejecutará durante las cargas asíncronas de la página.

Utilizando el enfoque de Tom con el script de inicio, puedes llamar:

__doPostBack('UpdatePanelName', '');

Un visto bueno y gracias a SAL y al resto de vosotros.Esto resolvió un gran problema que tenía: mi procedimiento demoraba hasta un minuto para que la página finalmente se renderizara y mostrara.

¡Gracias!

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