ASP.NET AJAX:La generazione di un UpdatePanel dopo il caricamento della pagina è completa

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

Domanda

Sono sicuro che questo è facile, ma non riesco a capire:

Ho un ASP.NET pagina con alcune Updatepanel su di esso.Voglio che la pagina completamente carico con un po 'attendere' il testo in Updatepanel.Poi una volta che la pagina è completamente caricato Voglio richiamare un codice-dietro funzione per l'aggiornamento UpdatePanel.

Tutte le idee su cosa combinazione di Javascript e codice-dietro ho bisogno di implementare questa idea?

SAL

PS:Ho provato a mettere la mia chiamata di funzione nel Page_Load, ma poi di esecuzione del codice della prima la pagina è consegnato e, come la funzione " voglio correre vuole un po di tempo la pagina impiega troppo tempo a caricare.

È stato utile?

Soluzione

Utilizzare un timer di controllo che saranno licenziati dopo un certo numero di millisecondi (caricamento di pagina).Nell'evento tick del timer di aggiornamento del pannello di aggiornamento.

Altri suggerimenti

Ho manipolato il tutto con ScriptManager suggerimenti che mi sa che mi sarebbe arrivata di lavoro, ma a me sembra che il Timer idea è più facile da implementare e non (davvero!) molto più di un trucco?!

Ecco come ho ottenuto il mio pannello di aggiornamento dopo la pagina iniziale di rendering è stato completo...

default.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>

e il codice di default.aspx.cs legge

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;
        }

    }
}

Così, la pagina si carica e il Timer (contenuta in UpdatePanel) incendi di 2 secondi dopo il caricamento della pagina in alto (credo non sono sicuro di quando il Timer inizia in realtà?).Il testo dell'etichetta viene riscritto e poi il Timer è disattivato per fermare eventuali ulteriori aggiornamenti.

Semplice, ma si può puristi là fuori dirmi se questo è un Orribile Hack?

Guarda ScriptManager.RegisterStartupScript

L'idea è che si registra un script da eseguire all'avvio (credo che una volta caricata la pagina).Il tuo script dovrebbe chiamare una funzione che provoca un post indietro attraverso il vostro UpdatePanel

Fare cose come questa con Updatepanel, piuttosto che qualcosa di facilmente comprensibile ti morderà, è solo una questione di quando.

La prima domanda di questo post, credo che quello che l'utente sta cercando è un messaggio da visualizzare all'utente, mentre il pannello di aggiornamento carichi.Basta mettere un controllo UpdateProgress come quella qui sotto nella tua pagina appena sopra il tuo controllo UpdatePanel, e sentitevi liberi di attivare un evento nella vostra UpdatePanel, mettere il vostro backend codice, come al solito, e tutto ciò che è contenuto all'interno del UpdateProgress controllo di carico, mentre il UpdatePanel contenuto è in fase di elaborazione nel backend.

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

Non c'è bisogno di alcun disordinato manuale di javascript roba.

ScriptManager.RegisterStartupScript permette uno script da eseguire all'avvio, all'interno di un pannello di aggiornamento.se si utilizza il vecchio ClientScript.RegisterStartupScript quindi lo script si esegue il rendering sarà al di fuori dei limiti dell'aggiornamento del pannello, e quindi non sarà eseguita durante async caricamento della pagina.

Utilizzando Tom approccio con lo script di avvio, quindi, è possibile chiamare:

__doPostBack('UpdatePanelName', ");

Un pollice in su e grazie a SAL e il resto di voi ragazzi.Questo ha risolto un grosso problema che ho avuto, la mia procedura è stata l'assunzione di un minuto per la pagina, finalmente, il rendering e la visualizzazione.

Grazie!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top