begin process at 2012 05 28 04:12:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Web 2.0

 > 

Ajax

 > 

Problème d'update panel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème d'update panel

mardi 29 septembre 2009 à 13:28:03 | Problème d'update panel

Ethan

Bonjour à tous,

Je suis en charge d'un projet qui utilise une multitude de popup dont chaque popup est un UserControl.
J'essaie d'uniformiser toutes mes popups.
J'ai créé une classe BasePopupUsercontrol (qui hérite de UserControl) où

- Dans le OnInit, je viens ajouter un ModalPopupExtender un bouton, un panel ... et j'ajoute le panel du contrôle au ModalPopupExtender.

- Dans le OnPreRender, j'instancie les css au différents éléments du PopupControl.

Ca marche impeccablement à part quand dans le panel qui s'est ajouté au ModalPopupExtender il y a un UpdatePanel. J'obtiens l'erreur "Cannot unregister UpdatePanel with ID 'UpdatePanel1' since it was not registered with the ScriptManager. This might occur if the UpdatePanel was removed from the control tree and later added again, which is not supported. Parameter name: updatePanel]".

Je suis consciens que mon explication paraîot pas trop clair alors je laisse les sources :

BasePopupUserControl.cs

Code C# :
protected panel popupcontent { get; set; }

        public abstract void setpopupcontentpanel();

        protected override void oninit(eventargs e)
        {
            if (scriptmanager.getcurrent(page) == null)
            {
                scriptmanager scp = new scriptmanager(); 
                page.controls.add(scp);
            }

            base.oninit(e);

            // add control necessary to display modal
            this.controls.add(new modalpopupextender() { id = "popup" });
            this.controls.add(new button() { id = "fakebutton" });
            this.controls.add(new panel() { id = "backgroundpanel" });
            this.findcontrol("backgroundpanel").controls.add(new panel() { id = "footer" });
            this.findcontrol("footer").controls.add(new button()
            {
                id = "buttonclosepopup",
                cssclass = "bigbutton",
                text = "back to main page"
            });

            setpopupcontentpanel();

            ((panel)this.findcontrol("backgroundpanel")).controls.add(this.popupcontent);

        }

        protected override void onprerender(eventargs e)
        {
            base.onprerender(e);

            // hide fake button (use to open modal popup in code behind
            ((button)this.findcontrol("fakebutton")).style.add("display", "none");

            // set style to popup
            ((panel)this.findcontrol("backgroundpanel")).style.add("display", "none");
            ((panel)this.findcontrol("backgroundpanel")).cssclass = "modalpopup";
            ((panel)this.findcontrol("footer")).cssclass = "modalfooter";
            this.popupcontent.cssclass = "modalcontent";

            // initialize popup
            modalpopupextender popup = (modalpopupextender)this.findcontrol("popup");
            popup.popupcontrolid = this.findcontrol("backgroundpanel").id;
            popup.backgroundcssclass = "modalbackground";
            popup.targetcontrolid = this.findcontrol("fakebutton").id;
            popup.cancelcontrolid = this.findcontrol("buttonclosepopup").id;
        }


        public void show()
        {
            if (this.popupcontent == null)
                throw new nullreferenceexception("popupcontent property cannot be null");

            ((panel)this.findcontrol("backgroundpanel")).style["display"] = "visible";
            if (this.findcontrol(popupcontent.id) == null)
            {
                this.findcontrol("backgroundpanel").controls.add(popupcontent);
            }

            ((modalpopupextender)this.findcontrol("popup")).show();
        }



PopupEmail.aspx.cs

Code C# :
protected void page_load(object sender, eventargs e)
        {
        }

        protected override void translate()
        {
            this.linkbuttonvalidateaddmail.text = translator.translate("buttonupdate");
        }

        protected override void fillvalues()
        {
        }

        protected override void onprerender(eventargs e)
        {
            base.onprerender(e);
            session["isemail"] = true;
            this.page.autopostbackcontrol = this.findcontrol("buttonclosepopup");
        }
        public override void setpopupcontentpanel()
        {
            this.popupcontent = panel1;
        }

        protected void linkbuttonvalidateadd_click(object sender, eventargs e)
        {
        }


Et enfin la partie qui pose problème :
PopupEmail.aspx

Code ASP.NET :
<asp:panel id="panel1" runat="server">
    <asp:updatepanel id="updatepanel1" runat="server">
        <contenttemplate>
            <asp:label id="label1" runat="server" text="cher membre,<br/><br/>afin de répondre au plus vite à vos question, vous vous demandons d'entrer votre adresse e-mail. <br/><br/>merci" />
            <br />
            <br />
            <asp:label id="labelemail" runat="server" height="21px" text="email :" style="vertical-align: middle;
                padding-right: 10px;" />
            <asp:textbox id="textboxemail" runat="server" height="21px" width="200px" />
            <asp:linkbutton id="linkbuttonvalidateaddmail" runat="server" height="21px" text="validate"
                style="padding-left: 10px;" />
        </contenttemplate>
    </asp:updatepanel>
</asp:panel>


Et là, j'ai l'erreur plus haut ...

Dans la page hôte du UserControl PopupEmail, il y a bien-sûr un script manager.

Si je mets pas d'updatepanel, quand je clique sur le LinkButton, la fenêtre se ferme. Alors qu'elle doit se fermer que si on clique sur le boutton ButtonClosePopup.

Quelqu'un peut solutionner le problème ?

Ethan
dimanche 25 octobre 2009 à 12:02:38 | Re : Problème d'update panel

JMPlus

Hello,

Je ne suis pas un expert, mais j'ai peut-être une piste suite à un problème que j'ai rencontré qui me semble assez proche.

En effet, j'avais un souci sur un usercontrol contenant un updatepanel qui disparaissait après validation.
En fait, le simple fait de cliquer sur un composant behind déclenche une réinitialisation(réaffichage) de l'updatepanel avec ses paramètres d'origine, ce qui remettait le div principal de mon usercontrol avec un display=none via mon CSS définit dans le design de celui-ci !
J'ai donc changé mon CSS et ce problème a été résolu.

Si je mets pas d'updatepanel, quand je clique sur le LinkButton, la fenêtre se ferme. Alors qu'elle doit se fermer que si on clique sur le boutton ButtonClosePopup.


Sans, ça doit même faire pire, non ? :)

Voilà, en espérant avoir apporté un petit élément de réflexion à défaut d'une solution...


Cette discussion est classée dans : add, id, panel, popup, findcontrol


Répondre à ce message

Sujets en rapport avec ce message

Session Id + Popup [ par notoriousFab ] BonjourJ'ai un site qui ouvre des pages en popup et, sur certains postes, la variable de session n'est plus valable dans le popup.Y-a-t-il un moyen de Controls.Add et Findcontrol [ par slednet69 ] 'lut,Je me permet une petite question sur le forum car je vais devenir fou....Jusqu'à maintenant en VS2003, lorsque je voulais ajouter dynamiquement d Problème de findcontrol [ par shawn ] Bonjour, Voici mon problème J'ai un gridview dans ma page. Dans ce gridview j'ai une templatecolumn dans laquelle j'ai un control radiobutton. Link button asp.net [ par abdo_dotnet10 ] Salut tout le mondej'essaye de creer des linkButton d'une maniere dynamique, pour les 2 premiers ça marche(ça veux dire lorsque je clique sur le linkb panel style windows [ par foufoulol ] Bonjour,Je débute en asp.net (et en ajax aussi). Pour l'instant j'ai réussi à ouvrir une popup (modale) lors d'un clic sur un bouton. Le problème c'es repeater dynamique [ par goyo33 ] bonjour je souhaite par un bouton valider récupérer les valeur de mes diferents controles contruis en code behind par un repeater lié a un liste d'obj checkBox [ par lilippx ] bonjour, voila mon soucis, je genere dynamiquement des checkBox depuis le code behind en leur attribuant une id : CheckBox monCheck = new CheckBox(); Récupération du id d'un control dans un updatePanel [ par traum7 ] bonjour, j'ai un projet web en vb.net dont j'utilise ajax, sur une page "Page1.aspx" qui est une page contenu de la page "Master.master", je veux ré Probleme ASP lors de redirection vers PopUp [ par slook123 ] Bonjour, Voila j'ai un problème actuellement sur une de mes applications. je vous explique le contexte, j'ai une page d'accueil contenant un gridView afficher ou savegarder le contenu d'une liste déroulante [ par bestgirl88 ] salut svp qui peux m'aider j'ai entrain de faire une application et j'ai fais un code qui permet de faire une recherche dans un e bibliothèque... le c


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,059 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales