2010-10-25 7 views

Répondre

1

page doit contenir suivant le balisage:

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

alors Page.Master aura pas un type de MasterPage, mais le type de votre page principale, à savoir:

public partial class MySiteMaster : MasterPage 
{ 
    public string ErrorText { get; set; } 
} 

page code-behind:

this.Master.ErrorText = ...; 

Une autre façon:

public interface IMyMasterPage 
{ 
    string ErrorText { get; set; } 
} 

(mis à App_Code ou mieux - dans la bibliothèque de classe)

public partial class MySiteMaster : MasterPage, IMyMasterPage { } 

Utilisation:

((IMyMasterPage)this.Page.Master).ErrorText = ...; 
+0

Hey là abatischev, je suis exactement le même problème que OP. Je suis sur le point d'essayer la route d'interface, qui semble rapide :) Juste curieux, est MasterType, utilisé dans le premier exemple valide dans un contrôle utilisateur? Je sais que cela fonctionne très bien avec les pages enfants, se demandant s'il existe un moyen de faire fonctionner cela avec les contrôles utilisateur avant d'implémenter l'option 2. Merci! – clamchoda

+0

@Chris: Salut! Pour autant que je sache - malheureusement non, cela ne fonctionne pas pour UserControls. UC ne sait rien à propos de la page maître de la page parent, juste une référence à eux: this.Page, this.Page.Master, donc l'option # 2 est la seule que je connaisse – abatishchev

5

Pour accéder au masterpage:

this.Page.Master 

alors vous pourriez avoir besoin de jeter le type réel de la page principale afin que vous puissiez obtenir la propriété ErrorText ou faire votre page maître implémenter une interface contenant cette propriété.

+0

Comment puis-je utiliser this.Page.Master d'une classe . Cela ne semble pas fonctionner pour moi. – Churchill

+0

http://stackoverflow.com/questions/416691/how-to-reference-a-master-page-from-a-user-control – DeveloperDan