onClick为动态生成的LinkButton
本文关键字:LinkButton 动态 onClick | 更新日期: 2023-09-27 18:11:40
在我的sharepoint web部件应用程序中。我像下面这样动态地生成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);
}
}
其中stateclick是通过点击美国的图像地图调用的
您可能没有在每次回发时重新创建动态生成的链接。
如果你有一个if (!IsPostback)
包裹在你的额头上,试着把它去掉。
我在这里有同样的问题....
在触发事件后创建HtmlTable
…这个表有(n) HtmlTableRow
s(在事件处理程序中计算)
现在每行包含从后面的代码生成的2个LinkButton
。事件处理后…每个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
s