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