none
如何為web page 新增page_init()事件呢 RRS feed

  • 問題

  • 我的問題如標題,
    我的visual studio tool 的後置程式碼區裡,成員欄的選項內找不著init 或是prerender等的事件, 在屬性欄裡關於page 也無事件(event)按鈕可以選擇,請問是我的tool工具設定有問題嗎?
    CMH
    2009年8月31日 上午 01:18

解答

  • Init與Prerender是方法不是事件
    用override覆寫即可,如下

        protected override void OnInit(System.EventArgs e)
        {
            base.OnInit(e);
            ....
        }

    • 已標示為解答 恐龍王 2009年8月31日 上午 06:57
    2009年8月31日 上午 02:15
  • Init 和 PreRender 是事件 ...
    只是它沒有出現在事件成員中。

    直接這樣加就可以了:

    protected void Page_PreInit(object sender, EventArgs e)
    {
    ...
    }
    
    protected void Page_Init(object sender, EventArgs e)
    {
    ...
    }
    
    protected void Page_PreRender(object sender, EventArgs e)
    {
    ...
    }

    小人物一枚。
    • 已標示為解答 恐龍王 2009年8月31日 上午 06:57
    2009年8月31日 上午 02:59
    版主

所有回覆

  • Init與Prerender是方法不是事件
    用override覆寫即可,如下

        protected override void OnInit(System.EventArgs e)
        {
            base.OnInit(e);
            ....
        }

    • 已標示為解答 恐龍王 2009年8月31日 上午 06:57
    2009年8月31日 上午 02:15
  • Init 和 PreRender 是事件 ...
    只是它沒有出現在事件成員中。

    直接這樣加就可以了:

    protected void Page_PreInit(object sender, EventArgs e)
    {
    ...
    }
    
    protected void Page_Init(object sender, EventArgs e)
    {
    ...
    }
    
    protected void Page_PreRender(object sender, EventArgs e)
    {
    ...
    }

    小人物一枚。
    • 已標示為解答 恐龍王 2009年8月31日 上午 06:57
    2009年8月31日 上午 02:59
    版主
  • 抱歉,沒注意看.
    System.Web.Page的確有Init與PreRender事件,但System.Web.Page也提供了OnPreRender與OnInit可覆寫方法,在大多情況下兩者是一樣的
    (實際上兩者還是有不同)
    在IDE中程式碼編輯可是可以正常看到Init與PreRender事件.
    你所說的應該是指設計畫面未顯示.這個問題說真得我沒注意過...因為通常會需要攬截Init與PreRender都是在寫WebControl時.

    2009年8月31日 上午 03:17
  • Programlin 這二種是不同的.
    一個是子類別繼承用的.透過寫Control的工程師去繼承,然後去Override這個虛擬方法.甚至去改變他的事件要不要出發.
    一個像是委派的動作.由另一隻Class去呼叫Page Class 然後由Caller去實做裡面的邏輯.
    2009年8月31日 上午 03:28
  • 是的
    的確有不同.如果override後未呼叫base方法就會另其事件失效.

    上面是我的疏忽,沒確認就回覆了...
    以往在VC++這類未有事件機制的語言必須用覆寫方法來處理,但如果覆寫後未呼叫base方法可能會導致一些機制失效.

    使用Event才是比較正確的做法,避免這類問題,但virtual方法還是必須存在,因未某些情況還是會用到.

    2009年8月31日 上午 03:35
  • 我是來亂的.這跟這個問題沒關.沒說也沒人發覺.在寫Page 這二個方法差異不大.
    2009年8月31日 上午 03:40
  • 謝謝各位先進仔細的描述,因為在研讀時,有時會看到一些範例會討論這些事件的不同點,可是每每看到現成的程式碼在那裡,自己new出來的form卻怎麼都無法做出來,問問周遭的同事卻沒有可以解惑,才會有這個疑問。

    可能我是從vb跳到asp.net來,對於一些事件的概念不夠清楚,真是感謝各位先進的指導。
    CMH
    2009年8月31日 上午 07:02