У меня возникает проблема при использовании LoadControl( type, Params )
. Позвольте мне объяснить...
У меня есть супер простой пользовательский элемент управления (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" />
с кодом (С#) за:
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;
}
}
}
В другом месте моего веб-приложения я добавляю экземпляр usercontrol на страницу, используя следующий код:
divValidationIssues.Controls.Add(LoadControl(typeof(ErrorDisplay), new object[] { MessageDetails }));
Я использую перегруженную версию LoadControl, потому что я хочу передать параметр Message в конструктор. Все это работает нормально.
Однако, когда OnPreRender()
запускается с помощью пользовательского контроля ErrorDisplay, переменные lblTitle и lblDescription оба null
, несмотря на то, что они имеют эквивалент разметки. Переменная сообщения была правильно заполнена.
Может ли кто-нибудь пролить свет на то, почему это может произойти?
Спасибо
EDIT:
Просто для ясности я также добавлю, что код, который программно добавляет usercontrol на страницу, запускается в ответ на нажатие кнопки, поэтому "хостинг-страница" продвигается через Init, Page_Load и теперь обрабатывает событие обработчики.
Я не могу добавить usercontrols на более ранний этап жизненного цикла asp, поскольку они создаются в ответ на событие нажатия кнопки.