0

我在 UserControl 中添加了一个动态 LinkBut​​ton。在回发时,会显示动态控件,但 Controls 集合的长度为 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());
            }
        }

    }
}
4

1 回答 1

2

如果您要动态添加控件,则需要在 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/

于 2013-10-05T15:27:28.647 回答