在我的sharepoint网页部分应用程序中。我动态生成LinkButtons如下。这很好用
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。
答案 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我重新生成LinkButtons,使用相同的ID ...并将它们链接到各自的EventHandler