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

!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 に答える
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 に動的に追加する場合は、ポストバックでコントロールを再作成する必要があります。これを行う最も簡単な方法は、上で示したようにビューステートを使用することです。

これが正しく行われていない一般的な兆候としては、クリックするとコントロールが消えたり、イベントがまったく発生しないことがあります。これが誰かを助けることを願っています!

于 2013-09-12T20:54:32.843 に答える
0

ページの読み込み時にこの動的ボタンを追加する場合は、その下にあることを確認してください

if (!IsPostBack)
{
//add button here
}
于 2012-10-04T12:21:33.360 に答える
-1

行を 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 に答える