【问题标题】:ASP.NET EventHandlingASP.NET 事件处理
【发布时间】:2009-02-16 11:24:19
【问题描述】:

我为 ASP.Net 创建了一个服务器控件。为了简短而精确,我 只列出我做的事情:

(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 为回发而重做,但连线事件永远不会被触发。

没有想法了:(

任何想法

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

    【讨论】:

    • 嗨,我已经重写了 OnInit 并调用了 EnsureChildControls。这应该保证在回发时重新创建控件,不是吗?萨沙
    • 不...我不认为它应该保证这一点。
    • 据我了解, EnsureChildControls 确定控件是否包含子控件,否则将创建它们。如果不使用此功能,您将如何保证创作?
    • 试图在 OnInit 中调用 CreateChildControls:两次表。将 CreatedChildControls 更改为其他内容(普通函数,而不是覆盖),在 OnInit 中调用它:一次,仍然没有事件
    【解决方案2】:

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

    this.Controls.Add(aTable);
    

    看起来不像你的代码示例,所以我认为这可能是问题

    【讨论】:

    • 嗨,我省略了那个调用,但是在 CreateChildcontrols 结束时它被添加到控件集合中。萨沙
    【解决方案3】:

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

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

    希望这会有所帮助!

    【讨论】:

    • 嗨,不。根本没有调用。它不是一个简单的控件,而是将不同的其他 asp.net 控件动态绑定在一起的东西。所以 IPostBackEventHandler 似乎不适合这里。
    【解决方案4】:

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

    【讨论】:

    • 服务器控件通过 asp.net 代码中的标记硬连线。所以它应该被添加到两种请求类型的控制树中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2012-04-15
    相关资源
    最近更新 更多