2

CodebehindファイルなしでASPXページにコンストラクターを実装できますか?

「test.aspx」というページがあり、コンストラクターを含めようとしています。

<%@ Page Language="C#" %>
<script runat="server">
    public dd_prop_test_aspx() : base() { /* Do stuff */ }
</script>

しかし、ランタイムコンパイラは私にエラーを出します:

CS0111:タイプ「ASP.test_aspx」は、同じパラメータータイプを持つ「test_aspx」というメンバーをすでに定義しています

Line 558:        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
Line 559:        public test_aspx() {
Line 560:            string[] dependencies;

コンストラクターを自動的に生成しないようにディレクティブを指定できますか(コンパイラーが生成するように見えます)?または、これを回避する別の方法がありますか?

最後に、Page_PreInitの前にクラスに変数を設定したいので、コンストラクターを使用せずに回避策が存在する場合は、それも機能します。

4

1 に答える 1

2

コンストラクターを再宣言することはできませんが<script runat="server">、横のコードでもオーバーライドしない限り、タグから任意のメソッドをオーバーライドできます。また、のようなページイベントハンドラー(同じ制限が適用されます)を追加することもできますPage_PreInit

ページイベントオーバーライドの両方を同時に使用できるため、事前にコードを挿入できる場合があります。

<script runat="server">
    void Page_PreInit(object sender, EventArgs e) 
    {
        Response.Write("First?");
    }

    protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e); // implicitly calls Page_PreInit
        Response.Write("Second!");
    }
</script>

したがってPage_PreInit、コードビハインドでページイベントハンドラーとして使用している場合はOnPreInit、.aspxのオーバーライドを使用して、の呼び出しの前にコードを配置できますbase.OnPreInit(e)

コードビハインドでオーバーライドOnPreInitしている場合は、.aspxでaを宣言できます。これは、コードビハインドロジックの前または後のPage_PreInitどこで呼び出すかによって異なります。base.OnPreInit(e)

言い換えれば、それがいつ発生するかを完全に制御できます。

于 2012-06-20T22:47:34.240 に答える