如何使用模式对话框弹出窗口和自定义控件从动态生成的按钮处理事件?

时间:2013-06-26 08:01:03

标签: c# asp.net ajax events

我有一个具有搜索功能的自定义控件。当用户单击搜索时,代码会根据搜索结果生成按钮列表。

每个按钮的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) });
    }

1 个答案:

答案 0 :(得分:1)

我一直在玩你的代码,它确实在屏幕上放了一个按钮。浏览器源以输入类型提交标记的形式显示按钮。为了测试它实际上是在某处向你的页面添加div,可能将它的id设置为testDiv。然后在你的selectButton_Click事件中,hander在效果中添加一行:testDiv.innerHtml =“make it here”。

如果div改变,你的按钮就会被激活。

此外,也许可以在selectButton_Click上的void之前添加protected,public或者其他内容。