ASP.NET 用户控件动态链接按钮不在回发Page_Load的控件中
本文关键字:控件 Page Load 用户 NET 动态 链接 ASP 按钮 | 更新日期: 2023-09-27 18:33:57
我在UserControl中添加了一个动态链接按钮。在回发时,将显示动态控件,但控件集合的长度为 0。
namespace TestUC1
{
public partial class UC : System.Web.UI.UserControl
{
public event EventHandler Click;
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
foreach (Control c in Controls)
{
if (c is LinkButton)
{
((LinkButton)c).Click += new EventHandler(OnClick);
}
}
} else
{
AddNewButton();
}
}
protected void AddNewButton()
{
LinkButton lb = new LinkButton();
lb.ID = "TestLink";
lb.Text = "Test Link";
lb.Click += new EventHandler(OnClick);
Controls.Add(lb);
}
protected void OnClick(object sender, EventArgs e)
{
if (Click != null)
{
Click(this, new EventArgs());
}
}
}
}
如果要动态添加控件,则需要在 Page.IsPostback=true 以及 Page.IsPostback=false...
换句话说,以下内容应该为您解决问题:
protected void Page_Load(object sender, EventArgs e)
{
AddNewButton();
}
另一种说法是,作为程序员,您需要手动将控件树恢复到回发之前的状态。完成此操作后,asp.net Web 窗体"机器"将加载视图状态并发布数据,以使控件恢复到回发之前的状态(然后引发按钮单击等事件)。
您可能会发现以下参考资料有助于您理解:
http://fuchangmiao.blogspot.co.uk/2007/11/aspnet-20-page-lifecycle.html
http://www.c-sharpcorner.com/uploadfile/61b832/Asp-Net-page-life-cycle-events/