2009-04-06 8 views
0

J'ai une page maître qui est définie via un HTTPModule sur PreInit(). MOMENT HEUREUX! Le problème est que j'ai besoin de remplacer la valeur masterpagefile sur quelques pages en raison d'un problème de mise en page. Quelqu'un sait le meilleur moyen?override masterpage module

J'ai essayé d'ajouter un Page_Preinit sur ma page, mais il est exécuté avant le PreInit() dans mon module, donc il finit par y être réinitialisé. Je pense peut-être que je devrais mettre à jour une variable de contexte dans ma page (quelque chose comme masterSetAtPage dont je pourrais bifurquer dans mon module) ... des pensées là-dessus?

Je travaille dans VB.Net, mais un exemple C# serait bien aussi.

+0

Pouvez-vous mettre à jour le code PreInit pour spécifier la page maître dont vous avez besoin ou est-ce que la page maître doit être mise à jour en fonction du contenu chargé? –

+0

Pouvez-vous être plus descriptif sur ce que vous voulez faire? Le grand obstacle consiste généralement à faire en sorte que PreInit définisse correctement la Masterpage, pourquoi ne pas simplement la définir ou la définir sur une autre? – JoshJordan

Répondre

1

On peut supposer que votre code actuel ressemble un peu le code décrit ici ...

http://www.odetocode.com/articles/450.aspx

Si oui, alors vous pouvez changer votre code qui accroche le PreInit à ressembler à quelque chose comme ça ...

if (page != null && String.IsNullOrEmpty(page.MasterPageFile)) 
{ 
    page.MasterPageFile = "~/Master1.master"; 
} 

et toute page qui utilise sa propre directive de page pour définir un MasterPageFile évitera d'être accroché à la page principale « par défaut ».

Si vous devez faire programatically, alors ce code ...

protected override void OnPreInit(EventArgs e) 
{ 
    base.OnPreInit(e); 
    this.MasterPageFile = "cheese.master"; 
} 

... dans le code de votre page serait derrière l'affaire. Évidemment, ce code ne serait ajouté qu'aux pages où le comportement spécial était nécessaire.

+0

Cela semble bon, cependant, j'ai vraiment besoin de programmer le maître, donc je ne peux pas définir une valeur statique dans la directive page. – madcolor

+0

OK, ce faisant ... protected override void OnPreInit (EventArgs e) { base.OnPreInit (e); this.MasterPageFile = "cheese.master"; } ... dans votre page devrait fonctionner. Je suis conscient que c'est à peu près ce que Mark a suggéré (ci-dessus) - bien qu'il ait montré OnInit et non OnPreInit. –

+0

@Martin - oui, j'ai pooché celui-là. ;) PreInit est le bon endroit. –