ここで、asp.netで動的に生成されたボタンとそのイベントハンドラーに小さな問題があります。特別なユーザーのために追加のボタンを備えた柔軟なテーブルを生成します。ボタンは動的に生成され、正常に機能します。しかし、イベントハンドラーを機能させることができません。
これが私のコードの一部です:ボタンを作成します(独自の関数で)。
…
Button ButtonChange = new Button();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click += new EventHandler(test);
…
そして
void test(object sender, EventArgs e)
{
// Do some stuff
}
ぼくの Page_Load
は空です。
しかし、ボタンをクリックしても、プログラムはテストにジャンプしません。何が問題なのですか?
編集!!!問題は、SQLクエリから返される行数が最初からわからないことです。すべての行に、削除ボタンと変更ボタンを追加します。プログラムで、結果をテーブルとして作成するメソッドを呼び出します。このメソッドでは、現在のユーザーがAdminUserであるかどうかを確認し、そうである場合はbuildAdminButtons関数を呼び出します。ここでは、すべての行について、新しい列にボタンを作成します。 OnLoadでこれを取得するにはどうすればよいですか?
private void buildAdminButtons(TableRow tempRow, int i)
{
Button ButtonDelete = new Button();
Button ButtonChange = new Button();
TableCell change = new TableCell();
TableCell delete = new TableCell();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonDelete.Text = "Delete";
ButtonDelete.ID = "delete_" + i.ToString();
ButtonDelete.Font.Size = FontUnit.Point(7);
ButtonDelete.ControlStyle.CssClass = "button";
change.Controls.Add(ButtonChange);
delete.Controls.Add(ButtonDelete);
tempRow.Cells.Add(change);
tempRow.Cells.Add(delete);
}
すべてのボタンに一意のIDを追加しますが、最初はわかりません。どうすればこれを処理できますか?
thatコードをpage_load
またはpage_init
イベントに配置する必要があります。
protected void Page_Load()
{
Button ButtonChange = new Button();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click += new EventHandler(test);
}
MSDNの記事を読む- 方法:プログラムでASP.NET Webページにコントロールを追加しますか?