2009-07-02 14 views
7

Ich muss jedes Mal, wenn eine Seite geladen wird, Daten an eine Variable in meiner Masterseite übergeben.Festlegen des Eigenschaftswerts auf der Masterseite von der Inhaltsseite

Ich habe eine Zeichenfolge [] von RequiredRoles, die ich auf jeder Inhaltsseite festlegen, welche Rollen für den Zugriff auf diese Seite erforderlich sind.

Auf meiner Masterseite habe ich eine Methode, die dieses Array verwendet und überprüft, ob der aktuelle Benutzer in einer oder mehreren dieser Rollen ist.

Wie würde ich das handhaben? Ich möchte im Grunde, dass auf jeder Seite ein String [] RequiredRoles definiert ist, und die Masterseite lädt dies bei jedem Aufruf und überprüft, ob die Benutzer in diesen Rollen sind.

Antwort

10

eine Eigenschaft in Ihrem Master-Seite erstellen und greifen Sie es von Content-Seite:

Master-Seite:

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

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

Inhalt Seite:

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

Typecast Page.Master zum Master-Seite, so dass Sie so etwas wie tun:

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

danke. Nur dieser Ansatz hat für mich funktioniert. – n3verLieMe

+0

Was ist MyMasterPageType? – Niloofar

+1

@Niloofar: Wenn Sie eine Musterseite erstellen, wird eine neue Klasse erstellt. In meinem Beispiel würden Sie "MyMasterPageType" durch den Namen Ihrer aktuellen Masterseitenklasse ersetzen. – NotMe

4

ich durch die Schaffung einer Basisklasse für alle Content-Seiten, so etwas wie gehen würde:

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 
     } 

    } 
} 

Und dann mache ich jede Seite von Basepage erbt, und die jeweils eine RequiredRoles definieren

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

Dies hat den Vorteil, dass der OnLoad-Handler-Code sauber und DRY ist. Und jede Seite, die von BasePage erbt, muss ein "RequiredRoles" definieren oder es wird nicht kompiliert.

+0

Dieser wurde nicht genug hochgestuft. Es ist der richtige Ansatz für die Handhabung der Anforderung, auch wenn sie sich von dem genauen Problem unterscheidet, das das OP zu lösen versucht hat. – NotMe

24

hinzufügen Seite Richtlinie für Ihr Kind Seite:

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

Dann Eigenschaft auf der Masterseite hinzufügen:

Master.Section = "blog"; 
0

CType:

public string Section { get; set; } 

Sie diese Eigenschaft wie folgt zugreifen können (Master.FindControl ("lblName"), Label) .Text = txtId.Text CType (Master.Fi ndControl ("pnlLoginned"), Panel) .Visible = True

Verwandte Themen