我编写了许多用户控件,效果很好,但现在令我沮丧的是,如果我动态添加它们,它们似乎根本不起作用。也就是说,当我将它们直接放入我的ASPX代码中时,它们可以正常工作,但是当我通过new
关键字创建它们然后将它们插入某个地方时,效果不佳。
请考虑以下控件:
class MyUserControl: UserControl {
public string Text { get => this.lblChildLabel; set => this.lblChildLabel = value; }
}
让我们假设在前面,它只有一个名为lblChildLabel
的标签。
如果将上述控件放入代码中,则可以轻松控制它:
// In page_prerender
theControl.Text = "Anything";
它显示正常。
但是,如果要“手动”实例化,例如:
var aNewControl = new MyUserControl();
aNewControl.Text = "Something"; // Exception: MyUserControl's lblChildLabel is not set to an instance of an object
对于任何内置控件,这似乎都不是问题。
有什么想法吗?
答案 0 :(得分:0)
作为一名优秀的SO公民,我正在报告解决方案。
简而言之,这是错误的:
var aNewControl = new MyUserControl();
aNewControl.Text = "Something";
这是正确的:
var aNewControl = (MyUserControl) Page.LoadControl("~/User Controls/MyControl.ascx");
aNewControl.Text = "Something";
前者没有贯穿正常的生命周期,而后者则正常。