动态添加的链接按钮不会触发事件

时间:2015-04-05 07:57:57

标签: asp.net webforms controls

在我的项目中,我正在动态添加一组链接按钮。当我为那些没有触发的链接按钮创建事件时。这是我的代码。

    namespace listofdirectories
    {
        public partial class directories : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string[] drives = System.IO.Directory.GetLogicalDrives();

                foreach (string str in drives)
                {
                    LinkButton lnk = new LinkButton();
                    lnk.Text = str;
                    lnk.ID = str;
                    this.Panel1.Controls.Add(lnk);
                    Panel1.Controls.Add(new LiteralControl("<br />"));
                    lnk.Click += new System.EventHandler(lnk_Click);
                }
            }
        protected void lnk_Click(object sender, EventArgs e)
        {
            Response.Redirect("files.aspx");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

导致问题的是ID中的特殊字符。您将ID指定为“ C:\ ”或“ D:\ ”。

我添加了一个基于计数器的ID以使其正常工作

int i = 0;
foreach (string str in drives)
{
    LinkButton lnk = new LinkButton();
    lnk.Text = str;
    lnk.ID = i.ToString();         

    this.Panel1.Controls.Add(lnk);
    Panel1.Controls.Add(new LiteralControl("<br />"));
    lnk.Click += new System.EventHandler(lnk_Click);
    i++;

}
  

仅包含字母数字字符和下划线的组合   character(_)是此属性的有效值。包括空格   或其他无效字符将导致ASP.NET页面解析器错误。

供参考阅读本文档https://msdn.microsoft.com/en-us/library/system.web.ui.control.id%28v=vs.110%29.aspx

答案 1 :(得分:0)

您的点击事件必须先分配,然后在面板中添加控件。

foreach (string str in drives)
            {
                LinkButton lnk = new LinkButton();
                lnk.Text = str;
                lnk.ID = str;
                lnk.Click += new System.EventHandler(lnk_Click);
                this.Panel1.Controls.Add(lnk);
                Panel1.Controls.Add(new LiteralControl("<br />"));

            }