2010-09-09 50 views
7

我正在運行一個ASP.NET 4.0項目。Page_PreInit未被調用?

在.aspx頁面中出現的頭AutoEventWireup="true"集。

雖然OnPreInit叫,Page_PreInit是不是?任何人都可以提出什麼是錯的?

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    Response.Write("bar"); 
} 

protected override void OnPreInit(EventArgs e) 
{ 
    Response.Write("foo"); 
    base.OnPreInit(e); 
} 
+0

你的語法似乎罰款。這是在MasterPage中定義的嗎? – Sauleil 2011-07-05 13:29:40

+2

我無法重現您描述的問題。是否在母版頁中定義了AutoEventWireup? – 2011-07-15 16:35:53

+0

還是繼承頁面? – JBrooks 2012-08-29 03:21:39

回答

1

Page_PreInit事件不火,你可以看到這一點,如果你把一個斷點在事件開始,並在運行時通過它一步。 字符串「bar」未被寫入屏幕的原因是它被OnPreInitEvent覆蓋。

請參閱下面的代碼。 通過它,你會注意到它是如何進入Page_PreInit,然後被覆蓋在OnPreInitEvent。 如果您註釋掉整個事件OnPreInit事件,您將看到「Page_PreInit」被寫入屏幕。

using System; 

public partial class _Default : System.Web.UI.Page 
{ 
    string eventName = String.Empty; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write(eventName); 
    } 

    protected void Page_PreInit(object sender, EventArgs e) 
    { 
     eventName = "Page_PreInit"; 
    } 

    protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 
     eventName = "OnPreInit"; 
    } 
}