2009-07-02 18 views
7

Potrzebuję przekazać dane do zmiennej na mojej stronie wzorcowej za każdym razem, gdy strona zostanie załadowana.Ustaw wartość właściwości na stronie wzorcowej z treści Strona

Mam ciąg [] z RequiredRoles, które ustawiam na każdej stronie treści, określając, jakie role są wymagane, aby uzyskać dostęp do tej strony.

Na mojej stronie wzorcowej mam metodę, która pobiera tę tablicę i sprawdza, czy bieżący użytkownik jest w co najmniej jednej z tych ról.

Jak mam sobie z tym poradzić? Zasadniczo chcę, aby każda strona miała zdefiniowane String [] RequiredRoles, a strona wzorcowa załaduje to w każdym wywołaniu i sprawdzi, czy użytkownicy są w tych rolach.

Odpowiedz

10

Tworzenie nieruchomości na stronie głównej i masz do niego dostęp od zawartości strony:

strona

Master:

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

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

Zawartość strony:

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

typecast Page.Master do strony głównej tak, że robisz coś takiego:

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

dzięki. tylko to podejście zadziałało dla mnie. – n3verLieMe

+0

co to jest MyMasterPageType? – Niloofar

+1

@Niloofar: Podczas tworzenia strony wzorcowej tworzy nową klasę. W moim przykładzie zastąpisz 'MyMasterPageType' nazwą rzeczywistej klasy strony wzorcowej. – NotMe

4

pójdę tworząc klasę bazową dla wszystkich stron treści, coś takiego:

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 
     } 

    } 
} 

I wtedy zrobić każda strona dziedziczy BasePage, a każdy definiowania RequiredRoles

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

Ma to tę zaletę, że chodzi o czystość i SUCHANIE kodu obsługi OnLoad. I każda strona, która dziedziczy po BasePage, musi zdefiniować "RequiredRoles", inaczej nie będzie się kompilować. Dyrektywa

+0

Ten egzemplarz nie został wystarczająco zatwierdzony. To właściwe podejście do obsługi wymagania, nawet jeśli różni się od dokładnego problemu, który OP próbował rozwiązać. – NotMe

24

Dodaj stronę do swojej strony dziecka:

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

Następnie dodać obiekt do strony głównej:

public string Section { get; set; } 

Można uzyskać dostęp do tej właściwości tak:

Master.Section = "blog"; 
0

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

Powiązane problemy