Bonjour à tous,
je cherche à instancier un objet Page grâce à son nom "maPage.aspx".
Un peu comme on pourrait le faire pour userControl
Quelqu'un a t'il une idée ?Code:
1
2
3 Control ctrl = Page.LoadControl("ctrl.ascx");
Merci d'avance.
Version imprimable
Bonjour à tous,
je cherche à instancier un objet Page grâce à son nom "maPage.aspx".
Un peu comme on pourrait le faire pour userControl
Quelqu'un a t'il une idée ?Code:
1
2
3 Control ctrl = Page.LoadControl("ctrl.ascx");
Merci d'avance.
La question que je me pose est pourquoi faire? tu veux recréer un module ISAPI pour IIS ?
le but est d'obtenir la liste des contrôles contenus dans une page
au moyen de :
Code:
1
2 Page.Controls
Tu peux le faire surement avec de la reflection, mais je ne saisis pas trop l'utilité de vouloir connaitre les contrôles d'une page non instanciée.
Je suspecte un problème de conception de ton appli si je puis me permettre
J'ai effectivement aussi pensé à la réflexion mais je n'ai pas encore trouvé comment faire dans le cas d'une page web.
L'idée finale est de réaliser un petit module qui permet de générer des fichiers ressources pour la localisation d'un projet web.
Visual studio peux générer ces fameux fichiers mais seulement pour une page à la fois. (en tout cas, je n'ai pas trouvé comment faire pour toutes les pages d'un coup).
Or, notre projet web contient beaucoup de pages et c'est fastidieux de le faire pour chaque.
Donc, en résumé ça donne :
pour chaque page ou usercontrol d'un projet web -->
en parcourir tous les contrôles -->
lister les propriétés "localizable"
et créer un fichier xml .resx avec toutes ces propriétés.
Maintenant, peut être y a t'il une meilleure solution de faire ça ?
Effectivement, je comprends mieux ton souci. Au temps pour moi sur cette histoire de conception...
Si j ai un peu de temps je regarderais un peu ce que l'on peut faire avec la reflection.
Pas de soucis ;-)
et merci...
Une autre idée serait de modifier la page mere et de créer dynamiquement les fichiers resx lors de l'appel en runtime de cette page. Et avec un web spider pour passer sur toutes les pages ca te ferais une construction automatique de tous tes fichiers resx. Tu peux meme mettre cette creatino de fichiere resx sensible au mode de compilation histoire de rendre tout ceci plus propre.
Code:
1
2
3
4
5
6
7
8
9
10
11 public partial class BasePage : System.Web.UI.Page { [Conditional("CreationLocalisation")] private void CreationLocalisation() { #if CreationLocalisation .... ton code....... #endif } }
Salut tonktonks,
j ai fait quelque recherches de mon coté cette après midi sur ton problème qui me semblait interessant, et malheureusement je ne vois pas de solution.
Ici, ils abordent ton problème. Et ils choisissent de faire un faux appel a la page pour en extraire ensuite les contrôles.
J ai fait un petit test avec une page aspx :
ou j ai declaré deux controles et je tente d'y acceder par reflexion dna sle code behind:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._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></title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox runat=server ID=C_TB_MyTB ></asp:TextBox> <asp:Label runat=server ID=C_Lbl_monLAbel></asp:Label> </div> </form> </body> </html>
Je vois bien ma page, et les deux contrôles non instanciés dans le debugger, mais impossible de les atteindre par quelque manière que ce soit. La collection de contrôle reste vide ( c'est normal car les contrôles ne sont pas instanciés), et dans la collection de propriétés du type, il n'y figurent pas. voila! désolé, si jamais tu trouves la solution cela m'intéresserait....Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 protected void Page_Load(object sender, EventArgs e) { Assembly assembly = this.GetType().Assembly; foreach (Type type in assembly.GetTypes()) { try { Object instance = (Object)Activator.CreateInstance(type); } catch (Exception except) { } } }
Bon courage à toi en tout cas, a+,