2010-01-05 3 views
3

J'ai un site Web avec une série de pages maîtres qui dérivent toutes d'une page maître "Base". Pour cet exemple, appelons-le MasterPage.master.Charge de page ASP.NET 3.5 - Numéro de conception

Modifier -----

Fondamentalement, il y a 2 moitiés du site: public et privé. Nous aimerions créer, entre autres, un utilitaire de suivi de site personnalisé. Chaque fois qu'une page est frappée ... nous capturons un tas de données sur l'utilisateur pour les rapports futurs, etc.

En ce moment je travaille sur le site public .. mais je veux réutiliser cet 'utilitaire' pour le site privé 3-4 mois à partir de maintenant.

Pour moi, une page principale ne semble pas être la meilleure façon d'accomplir cela ... Bien que je sois encore nouveau pour .NET, je pense que les pages maîtres ne devraient être utilisées que pour organiser l'interface utilisateur. J'ai regardé dans IHttpModule personnalisé et ai pu obtenir quelque chose au travail ... mais c'est un peu ghetto si vous me demandez.

public void Init(HttpApplication context) 
    { 

     context.AcquireRequestState += (new EventHandler(this.context_AquireRequest)); 
    } 
... 
void context_AquireRequest(object sender, EventArgs e) 
    { 

     HttpApplication application = (HttpApplication)sender; 
     HttpContext context = application.Context; 

      if (context.CurrentHandler is Page){ 
       //Do Stuff 
      } 


    } 

Fin Modifier ----

Y at-il une meilleure façon d'avoir un bloc de code en cours d'exécution à chaque fois qu'une page est chargée que ce qui suit ... Comme une coutume IHttpModule ou en quelque sorte dans le Global.asax.

[MasterPage.master] ...

protected void Page_Load(object sender, EventArgs e) 
    { 


     //...do stuff... 

    } 

Merci

Répondre

1

Si le bloc de code est toujours le même, je recommande

  • créer une classe de base pour toutes votre page
  • écrire votre code dans le OnLoad de cette page
  • faire tous vos pages hérite de cette classe de base

Voici un exemple de code:

public abstract class PageBase : Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     // do stuff 
    } 
} 

Toutes vos pages hériteraient de cette:

public class DisplayOrder : PageBase 
{ 
    // do stuff 
} 

Hope, ça aide.

0

Bien sûr nous avons besoin de plus d'informations, et vous ne postez pas autre chose que la signature de la méthode pour l'événement de chargement de la page. C'est l'événement qui est déclenché lorsque votre page se charge ou un événement est cliqué ou votre page est actualisée. La seule autre chose que vous pourriez faire est d'ajouter du code dans votre fichier global.asax.

http://msdn.microsoft.com/en-us/library/2027ewzw.aspx

0

Non - c'est vraiment votre meilleur pari. Si vous le placez dans la classe de base, il s'exécutera pour toutes les classes enfants tant que vous ne le remplacerez pas. Notez que vous pouvez avoir plusieurs gestionnaires Page_Load, donc si vous ne voulez pas vous ennuyer avec les méthodes de base appelantes à partir de méthodes surchargées, vous pouvez toujours ajouter un second gestionnaire, bien que ce soit un peu une conception obtuse. Qu'essayez-vous de faire exactement?

1

La méthode recommandée est l'utilisation de l'événement OnLoad.

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    // do stuff 
} 

Quelques infos backround sur OnLoad vs. Page_Load vs. Load event

0

Il y a beaucoup de cas où quelque chose en cours d'exécution à chaque fois que lorsqu'un chargement de la page est attendue et parfaitement acceptables. C'est ce que l'événement Load est là pour. Cela dépend ENTIEREMENT de ce que vous essayez de faire dans votre cas particulier. Voir this page pour un aperçu du cycle de vie de la page ASP.Net afin de vous assurer que ce que vous faites suit le principe de base de l'événement dans lequel vous le faites.