onClick用于动态生成的LinkBut​​ton

时间:2011-10-19 23:02:34

标签: c# asp.net visual-studio event-handling linkbutton

在我的sharepoint网页部分应用程序中。我动态生成LinkBut​​tons如下。这很好用

foreach (var pName in productTypesNames[productType] )
{
   var subLi = new HtmlGenericControl("li");
   var linkButton = new LinkButton{ Text = pName };
   linkButton.Click += new EventHandler(linkButton_Click);
   subLi.Controls.Add(linkButton);
   ul.Controls.Add(subLi);
}

但是,当我点击UI中的一个链接时,我的调试器永远不会遇到第一行

设置的断点
void linkButton_Click(object sender, EventArgs e)
{
}

更多代码

protected void StateClicked(object sender, CommandEventArgs e)
{
  //Generate a dictionary of type Dictionary<string, List<string>>
  //Display the dictionary
  foreach (var productType in productTypesNames.Keys)
        {
            var li = new HtmlGenericControl("li");
            nav.Controls.Add(li);
            var ul = new HtmlGenericControl("ul");

            var anchor = new HtmlGenericControl("a");
            anchor.Attributes.Add("href", "#");

            foreach (var pName in productTypesNames[productType] )
            {
                var subLi = new HtmlGenericControl("li");
                var linkButton = new LinkButton{ Text = pName };
                linkButton.Click += new EventHandler(linkButton_Click);
                subLi.Controls.Add(linkButton);
                ul.Controls.Add(subLi);
            }
            anchor.InnerHtml = productType;
            li.Controls.Add(anchor);
            li.Controls.Add(ul);
        }
 }

通过点击美国的图像地图来调用stateClicked。

2 个答案:

答案 0 :(得分:1)

您可能没有在每次回发时重新创建动态生成的链接。

如果您的foreach周围有if (!IsPostback),请尝试将其删除。

答案 1 :(得分:1)

我在这里遇到了同样的问题......

我在发射一个事件后创建了一个HtmlTable ... 该表有(n)HtmlTableRow s(在事件处理程序中计算)
现在每行包含2个LinkButton s,它们是在处理事件后从后面的代码中生成的... 并为每个LinkButton分配一个新的事件处理程序:

lnkbtnEdit.CommandArgument = b.BookID.ToString();
lnkbtnEdit.Click += new EventHandler(lnkbtnEdit_Click);

其中lnkbtnEdit_Click签名如下:
protected void lnkbtnEdit_Click(object sender, EventArgs e)

奇怪的是..当我点击生成的LinkButton时有一个回发...但事件没有触发......

我不知道究竟是什么问题...但我找到了解决方案:.. 看起来好像这些生成的控件在回发上消失了(试图分配一个id并使用Page.FindControl()女巫返回null!)
所以我不得不重新链接按钮....在Page_Load我重新生成LinkBut​​tons,使用相同的ID ...并将它们链接到各自的EventHandler