8

ASP.NET PreInit イベントで制御を取得するには? ポインターは null で、FindControl メソッドは null を返します。

マスター ページとコンテンツ ページを使用しています。コンテンツ ページのマークアップは次のようになります。

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server">
   <asp:Table ID="Table1" runat="server" Width="100%">
      .....
   </asp:Table>
</asp:Content>

そして、次のようなコード:

private void Page_PreInit(object sender, EventArgs e)
{
    Control table = this.FindControl("Table1");
    //table is null here
}

したがって、テーブルは this.FindControl("Table1") の後も null です。ページの NamingContainer も null です。私は何を間違っていますか?

更新コントロールを作成するには、このイベントを使用する必要があります。ASP.NET ページ ライフ サイクルの概要で述べたように、このイベントは動的なコントロールの作成に使用する必要があります。テーブルにリンクのリストを作成する必要があります。それを行う別の方法があるかもしれませんか?

4

4 に答える 4

5

PreInit は、コントロールが初期化される前に発生します。詳細については、ASP.NET ページのライフ サイクルを参照してください。

Init
すべてのコントロールが初期化され、スキン設定が適用された後に発生します。個々のコントロールの Init イベントは、ページの Init イベントの前に発生します。

このイベントを使用して、コントロール プロパティの読み取りまたは初期化を行います。

于 2010-07-01T15:26:39.593 に答える
1

Page の PreInit イベントは、コントロールが初期化される前にトリガーされるため、コントロールはまだ存在しません。Page の Load イベントなど、後のイベントでコントロールにアクセスする必要があります。http://msdn.microsoft.com/en-us/library/ms178472.aspxを参照してください。

于 2014-05-19T18:45:59.357 に答える
1

PreInit() イベントでは、標準 (定義済み) コントロールはその段階ではまだ作成されていないため、コントロールへの参照を取得できません。

Page_Load() イベントを使用して動的コントロールを作成します。このイベント中に、任意の動的コントロールを既存のコントロールに追加できます。

Page_Load() で動的コントロールを作成した後、PreRender() を使用して変更/更新を行います。

個人的には、PreInit を使用して、ページ全体のオブジェクト (つまり、データベース接続、ユーザー セッション オブジェクト) を定義し、セキュリティ認証チェック (および承認されていない場合はリダイレクト) を実行する場所のみを定義します。

于 2013-03-23T15:27:24.427 に答える