Question

Je suis sûr que c'est facile, mais je ne peux pas la comprendre:

J'ai un ASP.NET page avec de UpdatePanels sur elle.Je veux que la page d' complètement charge avec quelques "Veuillez patienter" texte dans les UpdatePanels.Puis une fois que la page est complètement chargé Je veux appeler un code-behind de la fonction de mise à jour de l'UpdatePanel.

Toutes les idées de la combinaison de Javascript et le code-behind-je besoin pour mettre en œuvre cette idée?

SAL

PS:J'ai essayé de mettre mon appel de fonction dans le Page_Load mais alors le code est exécuté avant la page est livré et, comme la fonction que je souhaite exécuter prend un peu de temps, la page est tout simplement trop long à charger.

Était-ce utile?

La solution

Utilisez une minuterie de contrôle qui sera mis le feu après un certain nombre de millisecondes (pour la page à charger).Dans le timer tick événement actualiser le panneau de mise à jour.

Autres conseils

Je jouait avec le ScriptManager suggestions à faire, qui je pense aurait finalement obtenu de travail, mais il me semble que le compte à rebours idée est plus facile à mettre en œuvre et pas vraiment(!) que beaucoup de hack?!

Voici comment j'ai obtenu mon panneau de mise à jour après la première page a été rendu complet...

par défaut.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>

et le code de défaut.aspx.cs lit

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

    }
}

Ainsi, le chargement de la page et de la Minuterie (contenus à l'intérieur de l'UpdatePanel) feux de 2 secondes une fois la page chargée (je pense - je ne suis pas sûr que lorsque le compte à rebours commence réellement?).Le texte de l'étiquette est réécrit et ensuite le Minuteur est désactivé pour empêcher toute mise à jour de plus.

Assez Simple - mais pouvez-vous les puristes là vous me dire si c'est une Horrible Hack?

Jetez un oeil à ScriptManager.RegisterStartupScript

L'idée est que vous pouvez enregistrer un script à exécuter au démarrage (je crois que une fois la page chargée).Votre script doit appeler une fonction qui provoque un message de retour par le biais de votre UpdatePanel

Faire des choses comme cela avec les UpdatePanels plutôt que quelque chose de facilement compréhensible VA vous mordre, c'est juste une question de quand.

À partir de la première question sur ce post, je pense que ce que l'utilisateur est à la recherche d'un message doit être affiché à l'utilisateur, tandis que le panneau de mise à jour des charges.Il suffit de mettre une UpdateProgress de contrôle comme celui ci-dessous sur votre page, juste au-dessus de votre contrôle UpdatePanel, et n'hésitez pas à déclencher un événement dans votre UpdatePanel, mettez votre backend code comme d'habitude, et tout ce qui est contenu à l'intérieur du UpdateProgress contrôle de la charge de votre UpdatePanel contenu est en cours de traitement dans le backend.

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

Il n'est pas nécessaire pour le désordre manuel javascript choses.

Le ScriptManager.RegisterStartupScript permet l'exécution d'un script au démarrage à l'intérieur d'un panneau de mise à jour.si vous utilisez l'ancien ClientScript.RegisterStartupScript, puis le script vous effectuez le rendu sera à l'extérieur des limites de la udpate panneau, et donc ne sera pas exécutée pendant async chargement de la page.

À l'aide de Tom approche avec le script de démarrage, vous pouvez appeler:

__doPostBack('UpdatePanelName', ");

Un pouce vers le haut et grâce à SAL et le reste d'entre vous les gars.Cela a résolu un grand problème que j'ai eu, mon intervention était de prendre jusqu'à une minute de la page pour afficher le rendu et l'affichage.

Merci!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top