2008-09-03 10 views
0

初めてページをロードするとき(!IsPostback)、コード内にボタンを作成してそれをページに追加してから、イベントハンドラをclickイベントに追加しています。イベントを起動できない

しかし、ボタンをクリックすると、ページがリロードされた後、私のイベントハンドラは起動しません。

誰でも理由を説明できますか?

答えて

4

@Brad:あなたの答えは完了していません。彼はPage_Loadイベントの間、ページライフサイクルの遅すぎる可能性が最も高いです。

これはあなたの欠けているものです。

ASP.NETはステートレスです。つまり、ページがレンダーされてブラウザに送信された後、ページオブジェクトとそのすべてが破棄されます。そのページとユーザーのブラウザー上にあるものとの間にサーバー上に残るリンクはありません。

ユーザーがボタンをクリックすると、そのイベントは、隠しビューステートフィールドのような他の情報とともにサーバーに返されます。

サーバー側では、ASP.NETは要求を処理するページを決定し、ページを最初から再構築します。 .aspxページに従って、サーバーコントロールの新しいインスタンスが作成され、リンクされます。再構築されると、ポストバックデータが評価されます。 viewstateはコントロールを設定するために使用され、イベントは発生します。

これはすべて、特定の順序で発生し、Page Lifecycleと呼ばれます。動的コントロールを作成し、実行時にWebページに追加するなど、ASP.NETでより複雑な作業を行うには、ページのライフサイクルを理解する必要があります。

問題が発生すると、そのページが読み込まれるたびにそのボタンを作成する必要があります。さらに、ページ上でイベントが発生する前にそのボタンを作成する必要があります。コントロールイベントはPage_LoadとPage_LoadCompleteの間で発生します。

ViewState情報が解析されてコントロールに追加される前、コントロールイベントが発生する前にコントロールをロードする必要があるため、PreInitイベントを処理してその時点でボタンを追加する必要があります。ここでも、ページがロードされるたびにこれを実行する必要があります。

最後の1ノート。イベントがオートワイヤードアップされるため、ページイベント処理はASP.NETでちょっと奇妙です。 LoadイベントハンドラはPage_Loadと呼ばれます。

2

ポストバック以外のボタンだけでなく、常にボタンを追加する必要があります。

0

これは、発生するイベントバインディングをHTMLに変換する必要があるためです。このポストバックは、OnInitとOnLoadの間のページにバインドされている場合に発生します。したがって、ボタンがイベントをバインドするようにするには、OnInitで作業を行う必要があります。

ページのライフサイクルの説明を参照してください。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

1

あなたがすべてのポストバックにイベントハンドラを再接続していない場合、そのイベントは、ボタンには存在しません。ページが更新されるたびに、イベントハンドラがアタッチされていることを確認する必要があります。だから、ここにあなたのページのためのイベントの順序です:

  1. ページは、ボタンとイベントハンドラを使用して作成されるが装着されている
  2. ボタンがポストバックでポストバック
  3. を引き起こして、クリックすると、Page_Loadイベントには、取り付けをスキップ!あなたのIsPostBackプロパティ声明この時点で
  4. のbecaueイベントハンドラの、それはあなたのイベント発生しませんクリックすると、ボタンのためのイベントハンドラが存在しない
関連する問題