【问题标题】:asp.net dynamically button with event handler带有事件处理程序的 asp.net 动态按钮
【发布时间】:2011-10-10 13:09:48
【问题描述】:

我在asp.net 中动态生成的按钮及其事件处理程序存在一个小问题。我为特殊用户生成了一个带有附加按钮的灵活表格。按钮将动态生成,效果很好。但我无法让事件处理程序工作。

以下是我的代码中的一些片段: 构建按钮(在自己的函数中)。

…
Button ButtonChange = new Button();

ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click += new EventHandler(test);
…

还有

void test(object sender, EventArgs e)
{ 
   // Do some stuff       
}

我的Page_Load 是空的。

但是如果我点击按钮,程序不会跳转到测试。怎么了?

编辑!!! 问题是我一开始不知道我从我的 sql 查询中得到了多少行。对于每一行,我将添加一个删除和一个更改按钮。 我在我的程序中调用了一个将结果构建为表格的方法。 在这个方法中,我检查当前用户是否是 AdminUser,如果是,我将调用 buildAdminButtons 函数。 在这里,我在新列中为每一行创建按钮。我怎么能在 OnLoad 中得到这个?

private void buildAdminButtons(TableRow tempRow, int i)
{
    Button ButtonDelete = new Button();
    Button ButtonChange = new Button();

    TableCell change = new TableCell();
    TableCell delete = new TableCell();

    ButtonChange.Text = "Change";
    ButtonChange.ID = "change_" + i.ToString();
    ButtonChange.Font.Size = FontUnit.Point(7);
    ButtonChange.ControlStyle.CssClass = "button";


    ButtonDelete.Text = "Delete";
    ButtonDelete.ID = "delete_" + i.ToString();
    ButtonDelete.Font.Size = FontUnit.Point(7);
    ButtonDelete.ControlStyle.CssClass = "button";

    change.Controls.Add(ButtonChange);
    delete.Controls.Add(ButtonDelete);

    tempRow.Cells.Add(change);
    tempRow.Cells.Add(delete);
}

我为每个按钮添加了一个唯一的 ID,一开始我并不知道。我该怎么办?

【问题讨论】:

    标签: c# asp.net button dynamic event-handling


    【解决方案1】:

    您必须将 代码放在 page_loadpage_init 事件中。

    protected void Page_Load()
    {
      Button ButtonChange = new Button();
    
      ButtonChange.Text = "Change";
      ButtonChange.ID = "change_" + i.ToString();
      ButtonChange.Font.Size = FontUnit.Point(7);
      ButtonChange.ControlStyle.CssClass = "button";
      ButtonChange.Click += new EventHandler(test);
    }
    

    阅读 MSDN 文章 - How to: Add Controls to an ASP.NET Web Page Programmatically?

    【讨论】:

    • 附带说明,事件的这种动态连接必须在每次回发时发生,但正如 AVD 在 page_load 或 page_init 中所说(也就是在页面生命周期中事件触发之前)。
    • 在Page_Load中初始化Button就够了吗? ...我将按钮添加到表中的每一行,生成它们的按钮要容易得多。谢谢。
    • 在 msdn 文章中,没有提到具有事件的动态控件。并且没有关于 Page_Load 或 Page_Init 事件的一句话。
    猜你喜欢
    • 2010-10-25
    • 2014-03-12
    • 2012-08-17
    • 1970-01-01
    • 2017-07-29
    • 2015-04-09
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多