2009-07-02 14 views
7

Devo passare dati a una variabile nella mia pagina master ogni volta che viene caricata una pagina.Imposta il valore della proprietà sulla pagina master dalla pagina di contenuto

Ho una stringa [] di RequiredRoles che imposto su ogni pagina di contenuto che definisce quali ruoli sono necessari per accedere a quella pagina.

Nella mia pagina principale, ho un metodo che accetta questo array e controlla se l'utente corrente si trova in uno o più di quei ruoli.

Come gestirlo? Fondamentalmente voglio che ogni pagina abbia un String [] RequiredRoles definito, e la pagina master lo caricherà su ogni chiamata e controllerà se gli utenti si trovano in quei ruoli.

risposta

10

creare una proprietà nella tua pagina master e accedervi da pagina di contenuto:

pagina

Master:

public partial class BasePage : System.Web.UI.MasterPage 
{ 
    private string[] _RequiredRoles = null; 

    public string[] RequiredRoles 
    { 
     get { return _RequiredRoles; } 
     set { _RequiredRoles = value; } 
    } 
} 

contenuti Pagina:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load() 
    { 
     Master.RequiredRoles = new string[] { /*set appropriate roles*/ }; 
    } 
} 
14

Typecast Page.Master alla tua pagina master in modo che si sta facendo qualcosa di simile:

((MyMasterPageType)Page.Master).Roles = "blah blah"; 
+1

grazie. solo questo approccio ha funzionato per me. – n3verLieMe

+0

cos'è MyMasterPageType? – Niloofar

+1

@Niloofar: quando si crea una pagina master, viene creata una nuova classe. Nel mio esempio sostituiresti 'MyMasterPageType' con il nome della tua vera classe di master page. – NotMe

4

mi piacerebbe andare con la creazione di una classe base per tutte le pagine di contenuto, qualcosa di simile:

public abstract class BasePage : Page 
{ 
    protected abstract string[] RequiredRoles { get; } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     // display the required roles in a master page 
     if (this.Master != null) { 
      // value-assignment 
     } 

    } 
} 

E poi faccio ogni pagina eredita da BasePage, e ogni definizione di un RequiredRoles

public partial class _Default : BasePage 
{ 
    protected override string[] RequiredRoles 
    { 
     get { return new[] { "Admin", "Moderator" }; } 
    } 
} 

Questo ha il vantaggio della pulizia e dell'asciugatura del codice del gestore OnLoad. E ogni pagina che eredita da BasePage è necessaria per definire un "RequiredRoles" altrimenti non verrà compilato.

+0

Questo non è stato svalutato abbastanza. È l'approccio corretto sulla gestione dei requisiti, anche se è diverso dal problema esatto che l'OP stava cercando di risolvere. – NotMe

24

Add direttiva pagina al tuo pagina figlio:

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

Quindi aggiungere proprietà alla pagina master:

public string Section { get; set; } 

È possibile accedere a questa proprietà come questa:

Master.Section = "blog"; 
0

CType (Master.FindControl ("lblName"), Label) .Text = txtId.Text CType (Master.Fi ndControl ("pnlLoginned"), Panel) .Visible = True

Problemi correlati