0

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

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

1 回答 1

1

我一直在玩你的代码,它确实在屏幕上放了一个按钮。浏览器源代码以输入类型提交标记的形式显示按钮。为了测试它实际上是在触发添加一个 div 到你的页面的某个地方,也许将它的 id 设置为 testDiv。然后在您的 selectButton_Click 事件处理程序中添加一行,效果如下:testDiv.innerHtml = "made it here"。

如果 div 发生变化,您的按钮将被触发。

此外,可能在 selectButton_Click 的 void 之前添加受保护的、公共的或其他内容。

于 2013-06-26T15:24:26.770 回答