以编程方式创建按钮时不会触发事件

时间:2012-10-04 11:16:49

标签: c# asp.net c#-4.0

我用事件处理程序动态创建了一个按钮。但事件没有解雇。请帮我这样做。我的部分代码在这里。

 Button btn = new Button();
 btn.ID = "btn" + i;
 btn.Text = "Add New";
 Panel1.Controls.Add(btn);
 btn.Click += new EventHandler(this.GreetingBtn_Click);
 Panel1.Controls.Add(new LiteralControl("<br /><br />"));

  void GreetingBtn_Click(Object sender, EventArgs e)
  {
     create();
  }

当我点击按钮时,我想访问create()函数。

5 个答案:

答案 0 :(得分:0)

在不了解您的代码的情况下,我猜你没有在ASP.NET的page life cycle的适当阶段创建控件

你需要的是PreInit,如下所述:

  

在开始阶段完成之后和初始化阶段开始之前引发。     将此事件用于以下事项:

     

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

答案 1 :(得分:0)

如果您要在页面加载时添加此动态按钮,请确保它位于

if (!IsPostBack)
{
//add button here
}

答案 2 :(得分:0)

总是让你创建一个时间控件的代码应该在!ispostback边,因为它们不需要一次又一次地创建

if (!IsPostBack)
{
   //Your code should be their enter code here
}

答案 3 :(得分:0)

List<string> myControls = new List<string>();

protected void Page_Load(object sender, EventArgs e)
{
     if(!IsPostBack)
     {
          myControls = new List<string>();
          ViewState["myControls"] = myControls;
     }
}

protected void override void LoadViewState(object savedState)
{
     base.LoadViewState(savedState);
     myControls = (List<string>)ViewState["myControls"];

     foreach(string controlID in myControls){
          //method to create your buttons goes here.
          createButtons(controlID);
     }
}

public void createButtons(string btnID){
     Button btn = new Button();
     btn.ID = btnID;
     btn.Text = "Add New";
     btn.Click += new RoutedEventHandler(this.GreetingBtn_Click);
     Panel1.Controls.Add(btn);
     Panel1.Controls.Add(new LiteralControl("<br /><br />"));
}

void GreetingBtn_Click(Object sender, RoutedEventArgs e){
     create();
}

尝试使用此代码。在asp.net中动态添加控件时,您必须重新创建回发中的控件。最简单的方法是使用上面显示的 viewstate

不能正确执行此操作的常见迹象是:控制单击时消失或仅根本不会触发。希望这有助于某人!

答案 4 :(得分:-1)

btn.Click += new EventHandler(this.GreetingBtn_Click);行向上移动一级,即在添加到父级之前并尝试路由事件。

Button btn = new Button();
 btn.ID = "btn" + i;
 btn.Text = "Add New";
btn.Click += new RoutedEventHandler(this.GreetingBtn_Click);
 Panel1.Controls.Add(btn);
 Panel1.Controls.Add(new LiteralControl("<br /><br />"));

  void GreetingBtn_Click(Object sender, RoutedEventArgs e)
  {
     create();
  }