我有一个具有搜索功能的自定义控件。当用户单击搜索时,代码会根据搜索结果生成按钮列表。
每个按钮的CommandArgument属性包含搜索结果的ID。当用户单击该按钮时,我想处理该事件,获取CommandArgument并将事件返回到具有该值的主页面。
问题是按钮没有引发事件。我认为这是因为它在回发或其他任何东西上都会丢失。我应该考虑一种列出值的替代方法来使其工作吗?
最简单的解决方法是什么?这就是我所拥有的:
private void Search()
{
foreach (var c in companies)
{
TableRow companyRow = new TableRow();
TableCell nameRowCell = new TableCell();
TableCell regRowCell = new TableCell();
Button selectButton = new Button();
selectButton.CommandArgument = c.Id.ToString();
selectButton.Text = c.Name;
selectButton.Click += new EventHandler(selectButton_Click);
selectButton.CausesValidation = false;
nameRowCell.Controls.Add(selectButton);
companyRow.Cells.Add(nameRowCell);
tblCompanies.Rows.Add(companyRow);
}
}
void selectButton_Click(object sender, EventArgs e) // <- Not getting handled
{
Button btn = (Button)sender;
string id = btn.CommandArgument;
if (id != "" && CompanyFound != null)
CompanyFound(new Company() { Id = int.Parse(id) });
}
答案 0 :(得分:1)
我一直在玩你的代码,它确实在屏幕上放了一个按钮。浏览器源以输入类型提交标记的形式显示按钮。为了测试它实际上是在某处向你的页面添加div,可能将它的id设置为testDiv。然后在你的selectButton_Click事件中,hander在效果中添加一行:testDiv.innerHtml =“make it here”。
如果div改变,你的按钮就会被激活。
此外,也许可以在selectButton_Click上的void之前添加protected,public或者其他内容。