我目前遇到的问题是代码隐藏中分配的事件处理程序没有出现在.aspx页面的HTML代码中。下面是执行该操作的代码片段:
HtmlTable table = new HtmlTable();
HtmlTableRow row = new HtmlTableRow();
foreach(XmlNode item in IDList)
{
LinkButton btn = new LinkButton();
btn.Text = item.InnerText;
btn.Click += new EventHandler(btn_Click);
HtmlTableCell cell = new HtmlTableCell();
cell.Controls.add(btn);
row.cells.add(cell);
}
table.rows.add(row);
类似的东西,或多或少。因此,当我运行页面并使用FireBug检查按钮时,我注意到创建的按钮的事件处理程序名称已更改为LinkButtons的唯一ID(ct125,126,127等),我认为,而不是“btn_Click”
我希望听到其他人之前是否遇到过这个问题,并找到了解决方法。感谢。
答案 0 :(得分:1)
您的按钮可能正在使用按钮的提交行为。尝试为按钮设置“UseSubmitBehavior = false”。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.usesubmitbehavior.aspx
答案 1 :(得分:1)
我能够让这段代码按预期工作。我动态添加4 LinkButton
并将Click事件连接到函数btn_Click
。当我点击每个链接时,他们会调用btn_Click
方法服务器端:
protected void Page_Load(object sender, EventArgs e)
{
HtmlTable table = new HtmlTable();
HtmlTableRow row = new HtmlTableRow();
for (int loop = 1; loop < 5; loop++)
{
LinkButton btn = new LinkButton();
btn.Text = "Test " + loop.ToString();
btn.Click += new EventHandler(btn_Click);
HtmlTableCell cell = new HtmlTableCell();
cell.Controls.Add(btn);
row.Cells.Add(cell);
}
table.Rows.Add(row);
// Add the table to a placeholder.
phInputs.Controls.Add(table);
}
protected void btn_Click(object sender, EventArgs e)
{
// Do something to catch a breakpoint.
var x = 10;
}
答案 2 :(得分:1)
当动态创建控件时,你也应该为它们分配Id,否则asp.net会自动为它们分配id,如ctl {somenumber}。此外,您需要在每个回发上重新创建这些控件,否则您的事件处理程序将无法正常工作。
答案 3 :(得分:1)
好的,我已经解决了这个问题,但我对于为什么这样修复它感到非常困惑。
{
HtmlTable table = new HtmlTable();
HtmlTableRow row = new HtmlTableRow();
int btnIndex = 0;
foreach(XmlNode item in IDList)
{
LinkButton btn = new LinkButton();
btn.Text = item.InnerText;
btn.Click += new EventHandler(btn_Click);
btn.ID = "Btn_Page" + btnIndex.ToString();
HtmlTableCell cell = new HtmlTableCell();
cell.Controls.add(btn);
row.cells.add(cell);
}
table.rows.add(row);
}
protected void Btn_Page_0(object sender, EventArgs e)
{
whatever eventhandler code
}
当我再次检查HTML时,分配给按钮的事件处理程序的名称仍然会更改为其ID。
<a id="Btn_Page_0" href="javascript:_doPostback('Btn_Page_0','')">
因此,对于每个按钮,其事件处理程序都更改为Btn_Page_0
,Btn_Page_1
,Btn_Page_2
等。
奇怪的是,点击后它们都返回到Btn_Page_0
事件处理程序,而不是btn_click
所以.....耶。有点令我难以理解为什么它会像这样工作,但无论如何它都有效......