2009-05-27 4 views
1

Je suis donc en train de câbler ma première MasterPage, et tout fonctionne bien, sauf pour une chose. C'est une application héritée, et j'ai une ancienne classe BasePage que toutes mes pages de contenu héritent. Il hérite de System.Web.UI.Page, mais n'a aucun contenu en lui-même (pas de fichier .aspx). Il exécute un tas de l'authentification de l'utilisateur/construction du menu d'octroi de rôle. Je veux conserver cette fonctionnalité mais l'utiliser pour définir des contrôles sur ma MasterPage afin de créer les menus. Je ne peux pas pour la vie de moi comprendre comment référencer les propriétés MasterPage sans une déclaration MasterType dans une page de contenu.Accès à une propriété d'une page maître à partir d'une classe ne faisant pas partie d'une page de contenu dans ASP.NET

classe Mon MasterPage est appelé NIMS_Master, et je donne les résultats suivants en elle (juste essayer de commencer):

public partial class NIMS_Master : System.Web.UI.MasterPage { public string MenuList { get; set; }

protected void Page_Load(object sender, EventArgs e) 
    {} 
    } 

Avec une déclaration MasterType dans l'une de mes pages de contenu:
<%@ MasterType VirtualPath="~/NIMS_Master.master" %>

Je peux accéder à ma propriété en Login.aspx.cs comme suit:

this.Master.MenuList = "this is the menu list";

Mais dans mon BasePage.cs, je n'ai nulle part où mettre la déclaration MasterType. Toutes les recherches sur google indiquent que je dois lancer ma classe NIMS_Master en tant que Master, mais je ne peux pas la faire fonctionner pour me sauver la vie. J'ai essayé plusieurs choses différentes, mais ma classe NIMS_Master n'apparaît pas dans BasePage.

((this.Master)NIMS_Master).MenuList = "This is a menu list";

BasePage.cs est dans mon répertoire App_Code et mon fichier MasterPage est dans la racine de l'application, si cela importe.

Répondre

1

J'ai eu mon BasePage dans App_Code et cherchait à définir une propriété de ma classe NIMS_Master qui était dans la répertoire racine de l'application. J'ai dû créer une classe MasterBase qui hérite de System.Web.UI.MasterPage dans App_Code et y mettre mes propriétés. Sheesh, je ne suis même pas sûr pourquoi je pensais pouvoir accéder à ces propriétés de classe depuis app_code.

1

Comme je le vois, votre casting devrait être: ((NIMS_Master) this.Master) .MenuList

+0

Oups, vous avez raison.Cependant, ce que je reçois quand j'essaie que: (vous manque une directive à l'aide ou une référence d'assemblage) Erreur Le type ou le nom namespace « NIMS_Master » n'a pas pu être trouvé \t Je sais que je Il manque quelque chose de simple ici pour exposer ma classe NIMS_Master à ma classe BasePage. – fr0man

0

La MasterBase a fonctionné pour moi aussi, merci fr0man.

Dans mon cas, j'avais une propriété publique dans mon fichier master.aspx.cs que j'ai déplacé vers une nouvelle classe MasterBase afin qu'elle puisse être exposée à d'autres classes.

Étape 1: créez un nouveau fichier MasterBase.cs dans votre répertoire App_Code. (Ce qui suit est ma classe complète.)

public partial class MasterBase : System.Web.UI.MasterPage 
{ 
    public string MyProperty = "Default"; 
} 

Étape 2: Mettre à jour le fichier Master.aspx.cs pour hériter de votre classe de base au lieu de System.Web.UI.MasterPage, et éliminer toutes les déclarations de propriété que vous ont déménagé à la classe MasterBase. (Ce qui suit est les premières lignes de la classe.)

public partial class Master : MasterBase 
{ 
    //The following is now defined in MasterBase. 
    //public string MyProperty = "Default"; 
... 

Étape 3: Jetez le page.Master à MasterBase pour accéder à ses propriétés.

... 
    IHttpHandler page = HttpContext.Current.Handler; 
    if (page is System.Web.UI.Page) 
    { 
     MasterBase masterPage = (MasterBase)((System.Web.UI.Page)page).Master; 
     if (masterPage != null) 
      masterPage.MyProperty = "New Value"; 
    } 
... 
Questions connexes