C# 以编程方式在ASP.NET中添加用户控件
我有一个用户控件,单击按钮时需要加载子控件。 问题是它必须从另一个类请求控件 因此,在button click事件中,我调用函数获取我的控件,并将其添加到页面中,如下所示:C# 以编程方式在ASP.NET中添加用户控件,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有一个用户控件,单击按钮时需要加载子控件。 问题是它必须从另一个类请求控件 因此,在button click事件中,我调用函数获取我的控件,并将其添加到页面中,如下所示: UserControl ctrl = ExampleDataProvider.GetControl(some params...); myDetailPane.Controls.Add(ctrl); GetControl方法如下所示: public static UserControl GetControl(some pa
UserControl ctrl = ExampleDataProvider.GetControl(some params...);
myDetailPane.Controls.Add(ctrl);
GetControl方法如下所示:
public static UserControl GetControl(some params...)
{
ExampleDetailPane ctrl = new ExampleDetailPane();
ctrl.Value = "12";
ctrl.Comment = string.Empty;
return ctrl;
}
由于页面的生命周期,此操作不起作用-子控件的页面加载被触发,其控件为空
我有点知道我的方法是错误的,为什么,但不知道最好的方法去解决它!有人能帮忙吗?有两种可能的方法:
若要在回发中访问控件或绑定事件,必须在CreateChildControls()方法中创建它们
private UserControl\u uc=null;
///
///创建所有控件。
///
///必须在此方法中为事件处理程序创建所有控件
受保护的覆盖无效CreateChildControls()
{
_uc=新用户控件();
this.Controls.Add(_uc);
base.CreateChildControls();
}
每次回发都必须重新创建动态控件,这是一个关于如何持久化动态控件及其状态的好链接 在Page\u Init
中创建控件。然后将其显示在按钮上,单击事件
(CTRL+C/CTRL+V来自我上周回答的另一个问题):
页面周期之间必须维护的所有内容都应该在page\u Init
中声明,而不是page\u Load
中声明
所有初始化,如添加事件处理程序和添加控件,都应该在初始化期间添加,因为状态在页面周期之间保存。应在Load
中处理控件内容和视图状态
也检查一下
Init
在初始化所有控件和任何外观后引发
设置已应用。用这个
事件来读取或初始化控件
财产
加载
该页调用OnLoad事件方法
在页面上,然后递归地执行
每个子控件都相同,其中
对其每个子对象执行相同的操作
控件,直到页面和所有
控件已加载
使用OnLoad事件方法设置
控件中的属性并建立
数据库连接
每次回发时都必须重新创建动态控件,这是一个关于如何持久化动态控件及其状态的好链接@Richard,+1,因为这是唯一能让这一切成功的方法。你应该回答这个问题而不是发表评论。链接已断开
private UserControl _uc = null;
/// <summary>
/// Creates all controls.
/// </summary>
/// <remarks>All the controls must be created in this method for the event handler</remarks>
protected override void CreateChildControls()
{
_uc = new UserControl ();
this.Controls.Add(_uc);
base.CreateChildControls();
}