2009-04-13 40 views
1

Webフォームに動的に作成されたボタンを追加しました。しかし、そのクリックイベントは機能していません。なぜ誰かが説明してくれますか?同じページ自体に戻ってくるASP.NET - 動的に作成されたボタン

Button save = new Button(); 
    save.ID = "btnSave"; 
    save.Text = "Save"; 
    save.Click += new System.EventHandler(this.Save_Click); 
    Webform.Controls.Add(save); 

protected void Save_Click(object sender, EventArgs e) 
{ 

    Response.Redirect("Default.aspx"); 
} 

その:

この

は私のコードです。 Default.aspxにリダイレクトしていません。

答えて

4

あなたのコード例は、診断のために十分ではありませんが、私はそれを試してみましょう。

ページのライフサイクルのどの時点で、ボタンをページに追加していますか?あなたがPreRenderでやっているのなら、それが働かない理由です。あなたはInitの間にそれをやっているはずです。

UPDATE:あなたは同じように一つ一つの時間を、それを作成しない限り

あなたが動的に、ページのライフサイクルの初期段階の後にコントロールを作成し、それを適切に動作させることはできません。これは、ライフサイクルが次のようになっているためです。

Init - > Load ViewState - >ページロード - >イベントハンドラ - > PreRender。

ボタンを作成し、最後の2番目のフェーズでイベントハンドラを指定しています。これは、ボタンがViewStateをページと共に保存するよう登録されていないことを意味します。そのため、そのボタンのすべての状態はクリックされたときに復元されません。つまり、割り当てられたイベントハンドラが空に見えなくなり、決して呼び出されません。

私の提案は、通常はページ上に(動的ではなく)保存ボタンを作成し、単純にVisible = "False"に設定することです。最初のボタンのClickハンドラで、保存ボタンVisible = "true"を設定します。

+0

私はボタンクリックでそれをしています –

+0

ボタンクリックで別のボタンを作成していますか? –

+0

これはボタンのクリックで別のボタンを作成しています。これは新しく作成されたボタンのイベントハンドラです。 –

0

これをデバッグして、コードがクリックイベントに到達するかどうか、またはリダイレクトに問題があるかどうかを判断できますか? Wompは正しいですが、Page_Initでイベントをバインドしてください。