2009-08-20 56 views
0

我关心按钮控制并放置在面板但不工作?事件控制不起作用?

protected void Button1_Click(object sender, EventArgs e) 
    { 
     Button btn = new Button(); 
     btn.Text = "Test button"; 
     Panel1.Controls.Add(btn); 
     btn.Click += new EventHandler(btn_Click); 
    } 

    void btn_Click(object sender, EventArgs e) 
    { 
     Response.Write("<script>alert('test')</script>"); 
    } 

回答

1

当你动态地添加控制到你的页面,你必须在任何后续请求(回发)上重新添加它们。您在Button1_OnClick中添加的按钮不会在后续请求中自动重新创建(例如在回发中)。

还有很多关于此主题的类似问题,在这里您可以找到详细信息。有关示例,请使用以下的搜索:

+0

我应该做我的代码behide? – 2009-08-20 11:13:09

0

确保您为该按钮指定了一个ID,并确保每次创建它时都是一样的。

在CreateChildControls重载中创建控件,在响应另一个事件时添加一次控件不足以将其保留在页面上。

你最好的赌注是怎么回事是否需要创建或没有按键被跟踪:

bool CreateButton 
{ 
    get 
    { 
     if (ViewState["CreateButton"] == null) 
      return false; 

     return (bool)ViewState["CreateButton"]; 
    } 
    set 
    { 
     ViewState["CreateButton"] = value; 
    } 
} 

override void public CreateChildControls() 
{ 
    panel1.Controls.Clear(); 

    if (CreateButton) 
    { 
     Button btn = new Button(); 
     btn.Text = "Test button"; 
     btn.ID = "CreatedButton"; // Note the ID here... 
     Panel1.Controls.Add(btn); 
     btn.Click += new EventHandler(btn_Click); 
    } 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    CreateButton = true; 
    EnsureChildControls(); 
} 

void btn_Click(object sender, EventArgs e) 
{ 
    Response.Write("<script>alert('test')</script>"); 
} 

类似的东西应该为你工作...