我在使用时遇到问题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" />
后面有代码( c# ):
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;
}
}
}
在我的 Web 应用程序的其他地方,我使用以下代码将用户控件的实例添加到页面:
divValidationIssues.Controls.Add(LoadControl(typeof(ErrorDisplay), new object[] { MessageDetails }));
我正在使用 LoadControl 的重载版本,因为我想将 Message 参数传递给构造函数。这一切似乎工作正常。
但是,当在OnPreRender()
ErrorDisplay 用户控件上触发时, lblTitle 和 lblDescription 变量都是null
,尽管它们具有等效的标记。消息变量已正确填充。
谁能解释为什么会发生这种情况?
谢谢
编辑:
为清楚起见,我还将添加以编程方式将用户控件添加到页面的代码正在运行以响应按钮按下,因此“托管页面”已通过 Init、Page_Load 进行,现在正在处理事件处理程序。
我无法在早期的 asp 生命周期阶段添加用户控件,因为它们是为响应按钮单击事件而创建的。