Ce que je voudrais savoir, c'est s'il existe une technique pour injecter des paramètres dans le rendu HttpContext
de sorte qu'il soit disponible pour le UserControl
lors de ses événements de cycle de vie de page (Page_Init, Page_Load) sont appelés pendant le rendu (pendant HttpContext.Current.Server.Execute()
)?Injection de paramètres dans des UserControls créés de manière dynamique sans spécialisation
Une telle technique permettrait d'injecter des données dans n'importe quel UserControl (par exemple via un appel à un service distant) sans avoir à le spécialiser pour un rendu dynamique. Il se chargerait de la même manière que s'il s'agissait d'un contrôle statique sur une page ASPX.
Commencez avec ce fragment de code de base:
Page page = new Page();
UserControl ctl = (UserControl)page.LoadControl(controlSpec);
page.Controls.Add(ctl);
// want to inject data into the control at this point
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, true);
String renderedContent = writer.ToString();
return renderedContent;
Je l'ai vu le @ScottGu ViewManager exemple où il ajoute un membre de données à chacun de ses UserControls
et utilise la réflexion pour injecter une source de données dans ce membre avant le contrôle est rendu en HTML.
J'ai également vu Stefan Sedich's prendre l'exemple @ScottGu où il dérive un ViewManager<Control>
générique qui permet la même chose mais évite le besoin de réflexion.
Par exemple, je voudrais être en mesure d'ajouter un paramètre à l'objet Request
ou au QueryString
dans le HttpContext avant de rendre l'UserControl
.
Ce que vous suggérez est une solution réalisable, mais il me semble inélégant. De plus, il faut spécialiser UserControl, que j'essaie d'éviter. –