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() 函数。

4

5 回答 5

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 中动态添加控件时,您必须在 postback 中重新创建控件。最简单的方法是使用上面显示的视图状态。

未正确执行此操作的常见迹象是:单击时控件消失或事件根本不触发。希望这对某人有帮助!

于 2013-09-12T20:54:32.843 回答
0

如果您在页面加载时添加此动态按钮,请确保其在

if (!IsPostBack)
{
//add button here
}
于 2012-10-04T12:21:33.360 回答
0

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

if (!IsPostBack)
{
   //Your code should be their enter code here
}
于 2012-10-04T15:03:01.023 回答
0

在不了解您的代码的情况下,我猜您没有在ASP.NET页面生命周期的适当阶段创建控件

您需要的是 PreInit,如此处所述:

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

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

于 2012-10-04T11:25:00.503 回答
-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();
  }
于 2012-10-04T11:25:58.370 回答