2012-06-07 66 views
2

我可以在沒有代碼隱藏文件的ASPX頁面中實現構造函數嗎?在ASPX頁面中使用構造函數(無代碼隱藏)

我有一個頁面 「Test.aspx的」 我嘗試包括構造函數:

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

但是,運行時編譯器給我一個錯誤:

CS0111: Type 'ASP.test_aspx' already defines a member called 'test_aspx' with the same parameter types

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

我可以指定一個指令不會自動生成構造函數(因爲它似乎是編譯器)?或者,我有另一種解決方法嗎?

最後,我想在Page_PreInit之前在類中設置變量,所以如果一個解決方法存在而不使用構造函數,那也可以。

+0

任何理由不只是使用後面的代碼?爲什麼在preinit之前需要設置值?在init中設置值可能是您可以使用的最早支持的生命週期事件。 –

+0

@Kyle Trauberman:我想做一些快速測試,並且我不想每次想更改代碼時都必須啓動/停止調試器。 – palswim

+1

聽起來像是想要做到這一點的壞理由。 AFAIK,沒有辦法做你想要做的事情。 –

回答

2

儘管無法重新聲明構造函數,但您可以自由地覆蓋<script runat="server">標記中的任何方法,只要您不在旁邊的代碼中覆蓋它即可。而且,您還可以添加頁面事件處理程序(應用相同的限制),如Page_PreInit

正如你可以同時使用這兩個頁面事件倍率,你也許可以提前注入代碼:如果你在你的代碼中使用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> 

所以一個頁面事件處理程序,您可以在.aspx中使用OnPreInit的覆蓋,並在調用base.OnPreInit(e)之前放置代碼。

如果你覆蓋在你的代碼背後OnPreInit,你可以宣佈在.aspx一個Page_PreInit,它取決於你的背後邏輯或後您的代碼之前調用base.OnPreInit(e)

換句話說:您可以完全控制它何時發生。

+0

謝謝!我肯定可以在PreInit之前設置數據。 – palswim

相關問題