[英]ASP.NET event lifecycle for inherited user controls
请原谅伪代码,但这是一个简单的问题:
我在标记中创建了一个带有文本框(id =“ txtbox”)的用户控件(myControlBase:UserControl)。 在代码背后,我编写了一个方法SayHello(string s){txtbox.Text = s; }。
我创建了另一个扩展myControlBase的用户控件(myControl:myControlBase)。 在此子控件的page_load中,我称为SayHello(“ hello”);。 并收到运行时错误消息,告诉我txtbox为null(显然尚未创建)。
那么,如何才能从用户控件继承并让我的子控件访问基本控件的标记? 我试图阅读这些控件的事件生命周期,但我想我没有明白。
有任何想法吗?
-编辑-
对不起,它是ASP.Net。 如果此代码使它更清晰,那么我必须在描述问题上做得很差。
txtBox是myControlBase的标记中存在的ASP:Textbox控件。
public partial class myControlBase : System.Web.UI.UserControl
{
protected void SayHello(string s){
txtBox.Text = s;
}
}
public partial class myControl: myControlBase
{
protected void Page_Load(object sender, EventArgs e)
{
SayHello("hello");
}
}
这将在SayHello(“ hello”)处失败; 因为txtBox返回Null。
我现在已经了解了这个问题,但是我没有一个好的解决方案。
像这样扩展用户控件时,您将完全失去对基本控件标记的访问权限。 在基本控件的Page_Load之前(可能不是?)调用子级的Page_Load。
除Page_Load
方法外,还有On*
方法,如OnInit
和OnLoad
。 这些是虚拟方法,因此可以被派生的用户控件覆盖。
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SayHello("hello");
}
看起来CreateChildControls尚未被调用。
尝试在Page_Load中添加GuaranteeChildControls(),或从OnPreRender事件中调用SayHello。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.