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.

    Consultant freelance, 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

- [WF4] Ajouter des contraintes à une activité (1/2) par Blog de Jérémy Jeanson le il y a 4 minutes

- [ASP.NET] Ne pas se faire avoir par IHttpModule et sa méthode Init() par Thomas Jaskula le il y a 8 heures et 3 minutes

- [MSTD10] SharePoint 2010 et Team Foundation Server par Philippe Sentenac [MVP SharePoint] le il y a 21 heures et 17 minutes

- [MSTD10] SQL Server 2008 pour les développeurs et Visual Studio Team System Database Edition par Michel Perfetti [Miiitch] le il y a 22 heures et 7 minutes

- [WF4] Localiser simplement une activité et son designer WPF par Blog de Jérémy Jeanson le il y a 23 heures et 17 minutes

- [Techdays 2010] Webcasts et Slides par Blog Technique d'Audrey PETIT le il y a 23 heures et 37 minutes

- NDepend v3. J’adore son intégration avec VS2010 par Thomas Jaskula le 03-11-2010, 00:18

- XNA 4.0 pour créer des jeux 3D sous Windows Phone 7 Series par Code is poetry le 03-10-2010, 14:14

- [Tools] NDepend 3 dans Visual Studio, Waaaaaaaou!!! par Blog de Jérémy Jeanson le 03-10-2010, 08:42

- [WF4] Grosses méprises en perspective sur le kit de migration WF3->WF4 par Blog de Jérémy Jeanson le 03-09-2010, 10:04