ASP.NET EventHandling

时间:2009-02-16 11:24:19

标签: c# asp.net

我为ASP.Net创建了一个servercontrol。因为短而精确我 只列出我做的事情:

(1)在OnInit中调用EnsureChildControls

(2)在CreateChildControls中创建一个动态表:

Table aTable = new Table();
aTable.ID = this.ID + "$" + T;
TableRow aRow = new TableRow();
aRow.ID = aTable.ID + "$R" + <COUNTER>.ToString();
TableCell aCell = new TableCell();

createLinkButton(row, col, caption, aCell, aRow.ID);

this.Controls.Add(aTable);

(3)具有如下功能:

void aLinkButton_Command(object sender, CommandEventArgs e)
{
    // Some stuff
    return;
}

(4)具有如下功能:

void createLinkButton(int row, int col, string caption, TableCell aCell, string baseID) {
    LinkButton lb = new LinkButton();
    lb.ID = baseID + "$" + row.ToString() + col.ToString();
    lb.Command += new CommandEventHandler(aLinkButton_Command);
    lb.Text = caption;
    lb.CommandName = "<command>";
    aCell.Controls.Add(lb);
    return;
}

但是:事件从未被调用过。 href用于回发,但有线事件永远不会被触发。

不再有任何想法:(

任何想法

4 个答案:

答案 0 :(得分:1)

您需要在Postback上重新创建动态创建的LinkBut​​ton,以便触发相关的EventHander。我强烈建议你阅读Scott Mitchell关于这个主题的classic article,而不是解释整个事情。

答案 1 :(得分:0)

您是否将表格添加到服务器控件.Controls集合中,例如

this.Controls.Add(aTable);

从您的代码示例中看起来不像,所以我希望这可能是问题

答案 2 :(得分:0)

我认为实施IPostBackEventHandler interface可能有所帮助。

在您的情况下,您可以实现接口,在RisePostBackEvent中,您可以调用事件处理程序方法。

希望这有帮助!

答案 3 :(得分:0)

查看使用服务器控件的页面(.aspx文件)。确保在初始请求和回发请求上将控件添加到页面的控制树中。所有事件都在回发请求上处理,如果在回发期间不存在生成事件的控件,则事件处理程序将永远不会触发。