创建动态按钮单击事件OnPreRender不会触发

时间:2012-05-04 12:35:31

标签: c# asp.net dynamic webforms prerender

我正在PreRender事件中动态创建一个按钮,如下所示:

Button myButton = new Button();
myButton.Text = "Test";
myButton.Click += new EventHandler(myButton_Click);
myDiv.Controls.Add(myButton);

此按钮在浏览器中呈现,但是当我单击该按钮时,单击事件不会触发。我尝试在PageLoad事件中创建一个完全相同的按钮,它运行得很好,但我必须在PreRender事件中创建此按钮,因为创建此动态按钮取决于我只得到的值在这种情况下。当我点击PreRender中创建的动态按钮时,点击事件会触发,我该怎么办?

6 个答案:

答案 0 :(得分:1)

您应该在页面的OnInit事件中将您的按钮添加到页面中,并在OnLoad期间或之前连接它的点击事件,然后您可以启用/禁用您的按钮或使用您在此期间拥有的变量使您的按钮可见/不可见PreRender活动。有关详细信息,请参阅Joel Coehoorn对this question的回答。否则尝试使用PlaceHolder控件,虽然这可能最终会变得更加棘手。

protected override void OnInit (EventArgs e)
{
  Button myButton = new Button();
  myButton.Text = "Test";
  myButton.Click += new EventHandler(myButton_Click);
  myDiv.Controls.Add(myButton);

  base.OnInit(e);
}

protected override void OnPreRender(EventArgs e)
{
  myButton.Visible = myConditional;

  base.OnPreRender(e);
}

答案 1 :(得分:0)

你应该在preinit阶段添加按钮,否则它不会触发

Asp net lifecycle

  

将此事件用于以下(PREINIT):

     
      
  • 创建或重新创建动态控件。
  •   

答案 2 :(得分:0)

也许在PreRender中创建按钮并绑定PageLoad中的点击事件?

答案 3 :(得分:0)

在PreRender中,你可以创建一些var,它会告诉你,你需要创建按钮。 在Render上创建该按钮需要JavaScript或发送表单。但是你不能使用+ = EventHandler这样简单的语法,需要更多的代码。

答案 4 :(得分:0)

根据MSDN中的此链接,您必须添加与其相关的按钮和事件,如果需要,请按照MSDN Lifecycle

中所述的OnInit()进行操作

“在所有控件初始化并且已应用任何皮肤设置后引发。单个控件的Init事件发生在页面的Init事件之前。 使用此事件可以读取或初始化控件属性。“

为此,尝试类似的事情:

protected override void OnInit(EventArgs e)
{
   // Do some stuff here
   base.OnInit(e);
}

答案 5 :(得分:0)

您应该在页面生命周期的早期移动控件创建。控制事件在Load之后和PreRender之前触发,因此OnLoad或之前应该执行任何操作。