3

PreRender次のようなイベントで動的にボタンを作成しています。

Button myButton = new Button();
myButton.Text = "Test";
myButton.Click += new EventHandler(myButton_Click);
myDiv.Controls.Add(myButton);

このボタンはブラウザでレンダリングされますが、ボタンをクリックしてもクリック イベントが発生しません。イベントで同じボタンを作成しようとしましたが、PageLoad完全に機能しますが、PreRenderこの動的ボタンを作成するかどうかは、このイベントでのみ取得する値に依存するため、イベントでこのボタンを作成する必要があります。で作成されたダイナミック ボタンをクリックするPreRenderと、クリック イベントが発生します。

4

6 に答える 6

2

ページの OnInit イベントでページにボタンを追加し、OnLoad 中または OnLoad の前にそのクリック イベントを結び付けてから、PreRender イベント中に持つ変数を使用して、ボタンを有効/無効にしたり、ボタンを表示/非表示にしたりできます。 . 詳細については、この質問に対する Joel Coehoorn の回答を参照してください。それ以外の場合は、PlaceHolder コントロールを使用してみてください。

protected override void OnInit (EventArgs e)
{
  Button myButton = new Button();
  myButton.Text = "Test";
  myButton.Click += new EventHandler(myButton_Click);
  myDiv.Controls.Add(myButton);

  base.OnInit(e);
}

protected override void OnPreRender(EventArgs e)
{
  myButton.Visible = myConditional;

  base.OnPreRender(e);
}
于 2012-05-04T13:09:16.677 に答える
0

preinit フェーズでボタンを追加する必要があります。そうしないと、起動しません。

ASP ネット ライフサイクル

このイベントは、次の (PREINIT) に使用します。

  • 動的コントロールを作成または再作成します。
于 2012-05-04T12:37:22.567 に答える
0

でボタンを作成し、PreRenderでクリックイベントをバインドしますPageLoadか?

于 2012-05-04T12:37:33.797 に答える
0

MSDN からのこのリンクによると、ここで説明されているように、必要に応じてそれに関連するボタンとイベントを追加する必要がありOnInit()ます: MSDN ライフサイクル

「すべてのコントロールが初期化され、スキン設定が適用された後に発生します。個々のコントロールの Init イベントは、ページの Init イベントの前に発生します。このイベントを使用して、コントロール プロパティの読み取りまたは初期化を行います。」

そうするには、そのようなことを試してください:

protected override void OnInit(EventArgs e)
{
   // Do some stuff here
   base.OnInit(e);
}
于 2012-05-04T12:42:12.417 に答える
0

コントロールの作成は、ページ ライフサイクルの早い段階に移動する必要があります。コントロール イベントは、Load の後、PreRender の前に発生するため、OnLoad またはそれ以前に実行する必要があります。

于 2012-05-04T12:42:37.420 に答える
0

PreRender では、作成ボタンが必要であることを示す変数を作成できます。そしてRenderで、必要なJavaScriptまたは送信フォームを使用して手動でそのボタンを作成します。しかし、+=EventHandler のような単純な構文を使用することはできません。さらにコードが必要です。

于 2012-05-04T12:40:20.967 に答える