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

- Silverlight 3 : Communication et multicast par Kévin Gosse le il y a 5 heures et 17 minutes

- [Perso] Découvertes estivales : Linux (Part I) par Le blog de FremyCompany le il y a 7 heures et 59 minutes

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 22 heures et 35 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 23 heures et 49 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le 07-03-2009, 09:56

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le 07-03-2009, 09:00

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 07-03-2009, 08:45

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15