2012-10-04 44 views
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()函数,当我点击按钮。

+1

在哪个页面事件中创建按钮? – Habib

回答

0

不知道很多关于你的代码,我猜你不是在创建ASP.NET

page life cycle

你需要的是什么了恰当阶段控制是PreInit,如下所述:

在开始阶段完成之后并在初始化阶段开始之前提出。 使用以下事件:

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

-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(); 
    } 
+0

这个过程没有变化.. – romi

+0

我修改了我的答案:尝试路由事件而不是经典事件。 –

0

如果添加在页面加载这个动态按钮,确保其下

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

总是让你创建将发应在侧!ispostback因为他们不是一个时间控制的代码需要重新创建并再次

if (!IsPostBack) 
{ 
    //Your code should be their enter code here 
} 
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中动态添加控件时,必须重新生成回发中的控件。如上所示,最简单的方法是使用视图状态

不这样做,常见症状是正确的:当你点击它或事件只是在所有不火控制消失。希望这可以帮助别人!

相关问题