2009-12-18 6 views
0

J'ai un IHttpModule pour afficher dynamiquement la page .aspx, afin que je puisse les empaqueter dans une DLL et les déposer dans un site Web existant et servir mes pages.Création de pages dynamiques .aspx

J'ai une classe MyPage dérivée de System.Web.UI.Page qui a un fichier .aspx, .aspx.cs et un fichier aspx.designer.cs.

Lorsque j'essaie d'instancier la classe I.e. MyPage myNewPage = MyPage(), tous les contrôles enfants sont null ...

Je tente ensuite de rendre cette sortie de page en utilisant Server.Execute (myNewPage) dans l'événement BeginRequest de IHttpModule.

Je sais que je peux compiler la page et utiliser le réflecteur pour obtenir la classe compilée, mais y a-t-il une façon plus simple de le faire?

Ou même une meilleure approche de ce que je fais?

Merci, Goosey

+0

Pourquoi avez-vous besoin de votre propre HttpModule pour servir votre ASPX? – mfeingold

+0

Mon espoir était de mettre toutes mes pages .aspx dans un assemblage et de distribuer un fichier .DLL afin que mes pages puissent être utilisées. Donc dans mon HttpModule je vérifie le chemin entrant, tel que /admin/quelquechose.aspx ... où quelque chose dans le chemin/admin est tiré de mon assembly compilé et n'existe pas physiquement dans le site asp.net des utilisateurs finaux . – Goosey

+0

Aussi, qu'en est-il de la compilation dynamique? – Goosey

Répondre

0

Je ne pense pas que ce soit possible. Vous ne pouvez pas simplement instancier une page comme n'importe quel autre objet. Ce dont vous avez besoin "pourrait" être un VirtualPathProvider.

0

Je ne suis pas sûr que ce soit la meilleure solution, mais vous pouvez intégrer toutes les pages ASPX dans votre DLL en tant qu'actifs. Sur demande, extraire l'aspx de la ressource intégrée et écrire sur le disque (si ce n'est déjà fait).

Il peut y avoir un moyen de fournir l'ASPX à partir de la ressource incorporée sans vraiment écrire sur le disque, mais je ne sais pas avec certitude. Aspx a une relation intime avec l'environnement d'exécution ASP.NET.

0

Je ne pense pas que l'instanciation d'un constructeur appelant simplement est une bonne idée. Ce que vous pouvez faire est au lieu d'avoir un vide (standard) ASPX et déplacez votre code pour les contrôles utilisateur - ascx

Ceux que vous pouvez charger dynamiquement en utilisant la méthode LoadControl

+0

Merci pour la réponse. En fait, j'espérais quelque chose de très similaire à LoadControl, mais pour une page. Je vais probablement finir cette route, j'espérais juste une solution plus propre et plus facile. – Goosey