Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

Passage de parametre entre Page et MasterPage

Lorsqu'on travail avec des MasterPage on a souvent besoin de pouvoir dialoguer entre la page et le Master associé. Prenons par exemple le cas d'un label dans le MasterPage, on aimerait pouvoir modifier ce Label dans le code de la page.

La première solution consiste à passer par la méthode FindControl de la propriété Master de l'objet Page :

((Label)Master.FindControl("Label1")).Text = "Modifié depuis la page";

Une autre solution est de passer par une propriété définie dans le Master :

public partial class Divers_MasterPage_MasterPage : System.Web.UI.MasterPage

{

 

    // ...

 

    public String LabelText

    {

        get { return Label1.Text; }

        set {Label1.Text = value;}

    }

 

    // ...

}

et dans notre page on peut l'appeller ainsi :

((ASP.divers_masterpage_masterpage_master)Master).LabelText = "Modifié depuis la page";

Je viens de trouver une troisième solution qui est encore plus sympa, la propriété Master de l'objet Page est par défaut de type System.Web.UI.MasterPage mais ASP.net permet de modifier le type de cette propriété lors de la compilation de la page, pour avoir la propriété Master du type de la masterPage qu'on utilise il faut rajouter une directive à la page :

<%@ MasterType VirtualPath="~/Divers/MasterPage/MasterPage.master" %>

On peut alors faire :

Master.LabelText = "modifié depuis la page";

Plutôt sympathique :-) Mais que se passe si on modifie dynamiquement la MasterPage dynamiquement ? Tout se passera bien à la compilation mais lorsque vous essayer d'accéder à la propriété Master une exception de type InvalidCastException va être lancé. Pour palier à ce problème il faut passer par une Abstract Class.

Créons une classe abstraite MasterBase qui hérite de MasterPage

public abstract class MasterBase : MasterPage

{

    public abstract String LabelText { get; set;  }

}

Héritons maintenant nos différentes MasterPage de MasterBase

public partial class Divers_MasterPage_MasterPage : MasterBase

{

 

    // ...

 

    public override string LabelText

    {

        get { return Label1.Text; }

        set {Label1.Text = value;}

    }

 

    // ...

 

}

Et enfin modifions notre directive page @MasterType

<%@ MasterType TypeName="MasterBase" %>

Ce code fonctionnera alors parfaitement :

public partial class Divers_MasterPage_Default : System.Web.UI.Page

{

 

    protected void Page_PreInit(object sender, EventArgs e)

    {

        Page.MasterPageFile = "MasterPage2.master";

    }

 

    protected void Page_Load(object sender, EventArgs e)

    {

        Master.LabelText = "modifié depuis la page";

    }

 

}

Posted: dimanche 12 novembre 2006 15:55 par cyril
Classé sous : ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

azra a dit :

Terrible :)

Ou t'es encore allé trouver ça toi!

# novembre 12, 2006 16:18

patrice a dit :

Azra&gt;Euh c kan même les bases d'ASP.net 2 ça...

# novembre 12, 2006 16:59

cyril a dit :

Je suis aussi d'accord avec Patrice que c'est pas trés compliqué :-)

Mais je n'avais pas encore vraiment utiliser la directive @MasterType

# novembre 12, 2006 19:11

azra a dit :

Pour être honete, bases d'ASP.NET 2.0 ou pas, je n'avai jamais utilisé cette directive @MasterType.

Le besoin ne s'étant accessoirement pas fais ressentir. (si je dois modifier des choses dans une master page, c'est une zone compléte, et j'utilise un content place holder, pour les quelques rares cas ou un je veux modifier uniquement une propriétée d'un contrôle, le cast m'a toujours suffit (et surtout intuitif, nul besoin d'aller trifouiller ailleur).

# novembre 12, 2006 23:57

Arthis a dit :

petite question qui gravite autour de ce sujet : A ton avis est il possible de mettre une master page (avec son code aspx) dans une bibliotheque de classe et d'y faire reference dans plusieurs applications intranets?

# novembre 12, 2007 17:33

cyril a dit :

Arthis : la réponse simple est non ! Il doit surement y avoir moyen mais je le déconseil. En gros il faut d'abord compiler ta page (tu peux récuperer le code de la compil du masterpage via Reflector après un publish) puis il te faut un fichier .master et tu met le type compilé dans l'attribut inherit de la directive master. Normalement ca devrait fonctionner :-)

# novembre 12, 2007 19:45
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- MBA : Pourquoi faire et comment le choisir ? par Blog Technique de Romelard Fabrice le il y a 15 heures et 0 minutes

- Y'a des erreurs qui peuvent rendre le développeur violent par Aleks's Blog le 02-02-2012, 16:33

- [Hyper-V 3] Présentation des commandlets PowerShell par Blog de SPBrouillet (Pierrick BROUILLET) le 01-31-2012, 16:01

- IIS7 – Compression GZIP par Atteint de JavaScriptite Aiguë [Cyril Durand] le 01-31-2012, 15:52

- SharePoint 15 Technical Preview Managed Object Model Software Development Kit par Matthew le 01-31-2012, 12:34

- Office 15 Technical Preview - Open specification Update par Matthew le 01-31-2012, 10:14

- TFS Integration Tools – Installation par Vivien Fabing le 01-31-2012, 00:06

- Test par RonnyK le 01-30-2012, 16:56

- [SharePoint 2010] Désactiver le correcteur orthographique dans les pages d’un site de publication par Jean-Christophe Brabant le 01-30-2012, 09:30

- [SharePoint 2010] Site internet et performances : poids et nombre des ressources par Arnault Nouvel le 01-30-2012, 00:52