2010-10-04 8 views
0

J'ai créé une classe appelée BasePage qui hérite de System.Web.UI.Page. Sur cette page j'ai déclaré une propriété appelée UserSession à laquelle je souhaite accéder depuis n'importe quelle page/pagePage.Etendre l'outil d'implémentation System.Web.UI.Page personnalisé pour inclure une propriété personnalisée accessible par page et page maître

public class BasePage : System.Web.UI.Page 
{ 
    string UserSession { get; set; } 

    public BasePage() 
    { 
     base.PreInit += new EventHandler(BasePage_PreInit); 
    } 

    private void BasePage_PreInit(object sender, EventArgs e) 
    { 
     UserSession = "12345"; 
    } 
} 

la page Mon Default.aspx.cs hérite de la classe de BasePage et me permet d'accéder à la propriété UserSession comme prévu.

public partial class Default : BasePage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write(UserSession); 
    } 
} 

Cependant, même si Default.aspx a MasterPage.Master correctement affecté, lorsque je tente et accéder à la propriété UserSession de MasterPage.Master.cs il ne peut pas trouver et ne construira pas.

Alors qu'est-ce que j'essaie de faire en faisant cela? Je veux exposer un objet UserSession à chaque page de mon application. Assez simple tu aurais pensé? Nan.

Répondre

1

MasterPage est séparé dans la hiérarchie à Page de sorte que vous ne pouvez pas accéder à la propriété directement à partir de cela. Toutefois, MasterPage possède une propriété Page qui renvoie l'objet Page, que vous pouvez convertir en votre classe BasePage. Ensuite, tant que UserSession est public (ou interne, ou interne protégé, ce qui pourrait avoir du sens ici), il peut accéder à cette propriété. Sauf si vous avez seulement une page maître behind, vous voudrez peut-être créer de même un BaseMasterPage et faire quelque chose comme:

public BaseMasterPage : MasterPage 
{ 
    protected string UserSession 
    { 
    get 
    { 
     return (Page as BasePage).UserSession; 
    } 
    set 
    { 
     (Page as BasePage).UserSession = value; 
    } 
    } 
} 
+0

Est-il possible d'exposer un nombre illimité de propriétés sans avoir à déclarer chacun d'eux individuellement dans la BaseMasterPage? –

+0

Vous pourriez exposer le '(page comme BasePage)' lui-même, et l'appeler par 'BasePage.UserSession' etc. bien que je m'oppose à ce que j'expose un peu beaucoup. –

1

C'est simple. Déclarez votre variable de chaîne en tant que public.

0

EDIT: La réponse de TheGeekYouNeed est correcte ... Je devrais savoir mieux que d'essayer de répondre aux questions ce tôt un lundi.

Je pense que vous aurez besoin de créer une classe de page maître de base qui contient votre propriété UserSession. Cela vous permet d'accéder à la propriété à partir de la page maître, ainsi qu'aux pages qui en héritent.

Questions connexes