【问题标题】:ASP.NET - Dynamically created buttonASP.NET - 动态创建的按钮
【发布时间】:2009-04-13 05:04:54
【问题描述】:

我在我的网络表单中添加了一个动态创建的按钮。但它的点击事件不起作用。谁能解释一下为什么?

这是我的代码:

    Button save = new Button();
    save.ID = "btnSave";
    save.Text = "Save";
    save.Click += new System.EventHandler(this.Save_Click);
    Webform.Controls.Add(save);

protected void Save_Click(object sender, EventArgs e)
{

    Response.Redirect("Default.aspx");
}

它返回到同一页面本身。它不会重定向到 Default.aspx。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您的代码示例还不够完整,无法进行诊断,但我会试一试。

    您在页面生命周期的哪个阶段向页面添加按钮?如果您在 PreRender 中执行此操作,这就是它不起作用的原因。您应该在 Init 期间执行此操作。

    更新:

    您无法在页面生命周期的 Init 阶段之后动态创建控件并使其正常工作,除非您每次都以相同的方式创建它。这是因为生命周期如下所示:

    初始化 -> 加载 ViewState -> 页面加载 -> 事件处理程序 -> 预渲染。

    您正在创建一个按钮并在倒数第二个阶段为其提供事件处理程序。这意味着该按钮永远不会注册以将其 ViewState 与页面一起保存,因此该按钮的所有状态在单击时都不会恢复 - 这意味着您分配的事件处理程序将消失得无影无踪,并且永远不会被调用。

    我的建议是在页面上正常创建“保存”按钮(非动态),然后简单地将其设置为 Visible="False"。然后,在您的第一个按钮的 Click 处理程序上,只需设置您的保存按钮 Visible="true"。

    【讨论】:

    • 点击按钮就可以了
    • 您要在单击按钮时创建另一个按钮?
    • 我正在创建另一个按钮单击按钮,这是新创建的按钮的事件处理程序。
    • 但是我有一些标签和文本框被动态添加到页面中。我想在将动态内容添加到页面后放置按钮控件。那我该怎么做呢?
    • 设置可见性对我来说似乎是一个很好的答案。如果您可以通过代码确定性地将按钮添加到页面,这意味着它不必首先动态加载。它的可见性/启用性似乎是动态元素。继续...
    【解决方案2】:

    您能否对此进行调试并确定代码是否甚至到达了点击事件,或者您的重定向是否存在问题? Womp 是正确的,在 Page_Init 中绑定事件。

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 2016-06-29
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2020-10-30
      • 2017-06-01
      相关资源
      最近更新 更多