ASP.NET AJAX:Auslösen eines UpdatePanels, nachdem der Seitenladevorgang abgeschlossen ist

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

Frage

Ich bin sicher, das ist einfach, aber ich komme nicht dahinter:

Ich habe eine ASP.NET-Seite mit einigen UpdatePanels.Ich möchte, dass die Seite vollständig Laden mit etwas „Bitte warten“-Text in den UpdatePanels.Dann ist die Seite erst einmal da komplett beladen Ich möchte eine Code-Behind-Funktion aufrufen, um das UpdatePanel zu aktualisieren.

Irgendwelche Ideen, welche Kombination aus Javascript und Code-Behind ich benötige, um diese Idee umzusetzen?

SAL

PS:Ich habe versucht, meinen Funktionsaufruf in Page_Load einzufügen, aber dann wird Code ausgeführt Vor Die Seite wird geliefert und da die Funktion, die ich ausführen möchte, einige Zeit in Anspruch nimmt, dauert das Laden der Seite einfach zu lange.

War es hilfreich?

Lösung

Verwenden Sie eine Timer-Steuerung, die nach einer bestimmten Anzahl von Millisekunden ausgelöst wird (damit die Seite geladen wird).Aktualisieren Sie im Timer-Tick-Ereignis das Update-Panel.

Andere Tipps

Ich habe mit den ScriptManager-Vorschlägen herumgespielt – ich schätze, dass ich sie irgendwann zum Laufen gebracht hätte, aber es scheint mir, dass die Timer-Idee einfacher zu implementieren ist und nicht wirklich (!) ein großer Hack ist?!

So habe ich mein Panel aktualisiert nach Das erste Rendern der Seite war abgeschlossen ...

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>

und der Code hinter default.aspx.cs lautet

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

    }
}

Die Seite wird also geladen und der Timer (im UpdatePanel enthalten) wird 2 Sekunden nach dem Laden der Seite ausgelöst (ich glaube – ich bin mir nicht sicher, wann der Timer tatsächlich startet?).Der Etikettentext wird neu geschrieben und dann wird der Timer deaktiviert, um weitere Aktualisierungen zu stoppen.

Ganz einfach – aber könnt ihr Puristen da draußen mir sagen, ob das ein schrecklicher Hack ist?

Schauen Sie mal rein ScriptManager.RegisterStartupScript

Die Idee ist, dass Sie ein Skript registrieren, das beim Start ausgeführt wird (ich glaube, sobald die Seite geladen ist).Ihr Skript sollte eine Funktion aufrufen, die einen Postback über Ihr UpdatePanel auslöst

Solche Dinge mit UpdatePanels statt mit etwas leicht Verständlichem zu tun, wird Sie nerven, es ist nur eine Frage des Zeitpunkts.

Von der allerersten Frage in diesem Beitrag an denke ich, dass der Benutzer nach einer Nachricht sucht, die ihm angezeigt wird, während das Update-Panel geladen wird.Fügen Sie einfach ein UpdateProgress-Steuerelement wie das folgende auf Ihrer Seite direkt über Ihrem UpdatePanel-Steuerelement ein und lösen Sie ein Ereignis in Ihrem UpdatePanel aus. Geben Sie Ihren Backend-Code wie gewohnt ein, und alles, was im UpdateProgress-Steuerelement enthalten ist, wird während Ihres UpdatePanels geladen Inhalte werden im Backend verarbeitet.

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

Es ist kein komplizierter manueller Javascript-Kram erforderlich.

Das ScriptManager.RegisterStartupScript ermöglicht die Ausführung eines Skripts beim Start in einem Update-Panel.Wenn Sie das alte ClientScript.RegisterStartupScript verwenden, liegt das von Ihnen gerenderte Skript außerhalb der Grenzen des Udpate-Bedienfelds und wird daher beim asynchronen Laden von Seiten nicht ausgeführt.

Wenn Sie Toms Ansatz mit dem Startskript verwenden, können Sie dann Folgendes aufrufen:

__doPostBack('UpdatePanelName', '');

Ein Daumen hoch und vielen Dank an SAL und den Rest von euch.Dies löste ein großes Problem, das ich hatte: Mein Vorgang dauerte bis zu einer Minute, bis die Seite endlich gerendert und angezeigt wurde.

Danke!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top