2010-09-09 6 views
7

J'exécute un projet ASP.NET 4.0.Page_PreInit non appelé?

La page .aspx a AutoEventWireup="true" dans l'en-tête.

Bien que OnPreInit soit appelé, Page_PreInit ne l'est pas? Quelqu'un peut-il suggérer ce qui ne va pas?

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

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

Votre syntaxe semble correcte. Est-ce défini dans la MasterPage? – Sauleil

+2

Je n'ai pas pu reproduire le problème que vous avez décrit. AutoEventWireup est-il défini dans la page maître? –

+0

Ou héritez-vous la page? – JBrooks

Répondre

1

L'événement Page_PreInit fait feu, vous pouvez le voir, si vous mettez un point d'arrêt au début de l'événement et l'étape à travers elle au moment de l'exécution. La raison pour laquelle la chaîne "bar" n'est pas écrite à l'écran est parce qu'elle est remplacée par le OnPreInitEvent.

Veuillez voir le code ci-dessous. Étape par étape et vous remarquerez comment il va dans Page_PreInit, puis est écrasé dans le OnPreInitEvent. Si vous commentez l'événement ENTIER OnPreInit, "Page_PreInit" est écrit à l'écran.

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"; 
    } 
} 
Questions connexes