2010-08-31 5 views
1

J'essaie d'ajouter dynamiquement un contrôle utilisateur que j'ai créé sur une page ASPX après son chargement. J'ai essayé d'envoyer une requête ajax à un gestionnaire qui utilisait la fonction RenderControl et renvoyait le code html du contrôle. Je l'ai ajouté au DOM en utilisant javascript.Ajouter un contrôle utilisateur après le chargement de la page

Le problème est que certains des contrôles doivent passer par leur fonction Page_Load et cela ne se produit pas lors de l'utilisation de la fonction RenderControl.

Quelqu'un at-il une idée de comment je peux faire cela?

+0

par curiosité, pourquoi avez-vous besoin de l'ajouter après le chargement de la page? après que la page est chargée, votre dans "client-world" (html, javasript). Je ne peux pas imaginer un moyen d'ajouter un contrôle serveur du client. vous devez faire quelque chose de vraiment compliqué/hacky (ajoutez un contrôle à un panneau de mise à jour, puis déclenchez immédiatement le déclenchement) – RPM1984

+0

Je charge l'interface utilisateur entière en arrière-plan et je ne veux pas que le client ressente cela (cela ralentit le navigateur). Je veux que le client voit une partie de la page et après que ceci soit rendu, continue et rende le reste de l'interface utilisateur (après le chargement de la page). – Anat

Répondre

0

essayez ceci:

System.Web.UI.Page page = new System.Web.UI.Page(); 
CustomUserControl userControl = page.LoadControl("~/control.ascx") as CustomUserControl; 
if (userControl == null) 
{ 
//error 
} 

userControl.ArticleId = id; 
//call any other properties or methods you need 

page.Controls.Add(userControl); 
System.IO.StringWriter sw = new System.IO.StringWriter(); 
HttpContext.Current.Server.Execute(page, sw, false); 
responseString = sw.ToString(); 

espoir cette aidera!

+0

Merci, ça a marché! – Anat

0

Je ne pense pas que vous puissiez le faire de cette façon.

Vos contrôles ne passent pas par leur Page_Load, car ils ne sont ajoutés à aucun contrôle. Tout ce que vous faites est de rendre leur code HTML (en utilisant RenderControl) et de le charger en utilisant javascript. Il n'y a pas de place pour l'événement Page_Load.

J'utiliser UpdatePanel au lieu de cette façon:

<asp:UpdatePanel> 
    <ContentTemplate> 
     <asp:Panel ID="pnlDynamic" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

puis dans le code derrière ajouter vos commandes dynamiques au panneau

pnlDynamic.Controls.Add(new YourControl()); 
Questions connexes