J'ai un problème lors de l'utilisation LoadControl(type, Params)
. Laissez-moi vous expliquer ...Asp.net Usercontrol LoadControl Problème
J'ai un contrôle utilisateur super simple (ascx)
<%@ Control Language="C#" AutoEventWireup="True" Inherits="ErrorDisplay" Codebehind="ErrorDisplay.ascx.cs" EnableViewState="false" %>
<asp:Label runat="server" ID="lblTitle" />
<asp:Label runat="server" ID="lblDescription" />
avec le code (C#) derrière de:
public partial class ErrorDisplay : System.Web.UI.UserControl
{
private Message _ErrorMessage;
public ErrorDisplay()
{
}
public ErrorDisplay(Message ErrorMessage)
{
_ErrorMessage = ErrorMessage;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (_ErrorMessage != null)
{
lblTitle.Text = _ErrorMessage.Message;
lblDescription.Text = _ErrorMessage.Description;
}
}
}
Ailleurs dans mon application Web J'ajoute une instance de la usercontrol à la page en utilisant le code suivant:
divValidationIssues.Controls.Add(LoadControl(typeof(ErrorDisplay), new object[] { MessageDetails }));
J'utilise la version surchargée de LoadControl parce que je veux passer le paramètre Message au constructeur. Tout cela apparaît pour fonctionner correctement.
Cependant, lorsque le OnPreRender()
est déclenché sur le contrôle utilisateur ErrorDisplay, les variables lblTitle et lblDescription sont toutes les deux null
, bien qu'elles aient un balisage équivalent. La variable de message a été correctement renseignée.
Quelqu'un peut-il faire la lumière sur la raison pour laquelle cela peut se produire?
Merci
EDIT:
Juste pour plus de clarté, je vais aussi ajouter que le code qui ajoute programatically UserControl à la page est en cours d'exécution en réponse à une pression sur un bouton, de sorte que le « hébergement page 'a progressé dans Init, Page_Load et traite maintenant les gestionnaires d'événements.
Je ne peux pas ajouter les usercontrols à un stade du cycle de vie asp plus tôt car ils sont créés en réponse à un bouton événement click.
+1 et une note de remerciement de ma part pour résoudre le problème que j'avais. :) –
Excellent suivi! –