Question: Est-il possible dans le code back-end (pas dans le code derrière mais dans une classe d'arrière réelle) pour charger et rendre une page ou un contrôle défini dans .aspx ou .ascx sans avoir à utiliser Load (chemin) et créer simplement une instance de la classe page/control?Créer instance Aspx Page ASCX Contrôle Dans une classe Aval sans chargement CheminFichier
Je veux être en mesure de le faire (d'une classe d'arrière pas un code derrière):
MyControl myCtl = new MyApp.Views.Shared.MyControl();
String html = Util.ControlToString(myCtl); //I get an empty string & hidden errors
au lieu de cette
public static string ControlToString(string path)
{
Page pageHolder = new Page();
MyControl myCtl = (MyControl)pageHolder.LoadControl(path);
pageHolder.Controls.Add(myCtl);
StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);
return output.ToString();
}
Détails: Dans un Asp. netApp Web J'ai parfois besoin de rendre un contrôle utilisateur (.ascx) ou une page (.aspx) en tant que chaîne HTML. Lorsqu'une page ou un contrôle hérite d'un code, sa classe apparaît dans intellisense dans mon code de retour et je peux créer une instance et définir des propriétés sans avoir d'erreurs de compilation ou d'exécution. Toutefois, lorsque j'essaie de rendre la page ou le contrôle, j'obtiens toujours une chaîne vide et lors de l'inspection, la page ou le contrôle affiche des erreurs de rendu internes supprimées sauf si je charge la page ou le contrôle en utilisant son chemin physique.
Je pense que le problème clé a à voir avec quand & comment les fichiers .aspx/.ascx sont compilés à l'exécution. Je ne veux pas créer une bibliothèque de commandes utilisateur pré-compilée, car cela rendrait le processus de conception difficile et j'apprécie beaucoup les fonctionnalités de concepteur offertes par les pages .aspx/.ascx, et j'adorerais trouver un moyen de faites que les pages soient compilées dans la solution de manière à ce qu'elles soient utilisables comme n'importe quelle autre classe back-end mais peuvent encore être créées en utilisant le concepteur. Je veux le meilleur des deux mondes (1) pour pouvoir éditer des pages et des contrôles dans le concepteur et (2) créer des instances et placer leurs propriétés en utilisant des classes arrières.
J'aime cette approche car elle place les chaînes du chemin du fichier magique près de l'endroit où elles sont utilisées et rend les exigences d'initialisation explicites dans l'appel LoadControl. J'avais fait le chargement indirectement en utilisant des génériques, puis en définissant les propriétés par la suite, ce qui rend les erreurs plus faciles et place les chaînes du chemin du fichier magique plus loin de l'endroit où elles sont réellement nécessaires. – Glenn