2009-07-02 10 views
7

ページをロードするたびに、マスタページの変数にデータを渡す必要があります。マスタページのプロパティ値をコンテンツページから設定する

私は各コンテンツページに設定したRequiredRolesのstring []を持っており、そのページにアクセスするために必要なロールを定義しています。

私のマスターページには、この配列をとり、現在のユーザーがこれらの役割の1つ以上にいるかどうかを確認するメソッドがあります。

これを管理するにはどうすればいいですか?私は基本的に各ページにString [] RequiredRolesを定義しておき、マスターページはこれを呼び出しごとにロードし、ユーザーがそのロールにいるかどうかを確認します。あなたのマスターページへ

答えて

10

あなたのマスターページでプロパティを作成し、コンテンツページからアクセス:

マスターページを:

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

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

コンテンツページ:

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

型キャストPage.Masterにあなたのような何かをやっているように:

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

ありがとうございます。このアプローチだけが私のために働いた。 – n3verLieMe

+0

MyMasterPageTypeとは何ですか? – Niloofar

+1

@Niloofar:マスターページを作成すると、新しいクラスが作成されます。私の例では、 'MyMasterPageType'を実際のマスターページクラスの名前に置き換えます。 – NotMe

4

私は、すべてのコンテンツページの基本クラスを作成することで行くようなものだろう:

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 
     } 

    } 
} 

そして私は、すべてのページがBasePageクラスから継承作り、​​それぞれがRequiredRoles

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

を定義しますこれは、清潔さとOnLoadハンドラコードのDRY-ingという利点があります。そして、BasePageから継承するすべてのページは、 "RequiredRoles"を定義する必要があります。そうでなければ、コンパイルされません。

+0

これは十分にupvotedされていません。 OPが解決しようとしている正確な問題とは異なっていても、要件を処理するのは正しいアプローチです。 – NotMe

24

あなたの子ページにページディレクティブを追加します。

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

を次に、あなたのマスターページにプロパティを追加します。

public string Section { get; set; } 

あなたはこのように、このプロパティにアクセスすることができます。

Master.Section = "blog"; 
0

ctype関数(Master.FindControl( "lblName")、ラベル).Text = txtId.Text CType(Master.Fi ndControl( "pnlLoginned")、Panel).Visible = True

関連する問題