2012-04-23 2 views
1

に値を取得しました。私は、外部クラスでアクセスしたい変数(コールがmyInteger)を使用するmasterpage(myMaster)を見ました。マスターページからクラス

通常私はちょうど行うことを私のaspxで:@ <% MasterType VirtualPath = "myMaster.master" %>

そして、私がやって後ろに私のコードでそれにアクセスすることができますMaster.myInteger ...

ここに私の問題は、私は別のクラスでそれをアクセスしたいされて(何の.aspxのが存在しない場合)

私は Master.AppRelativeVirtualPath =「myMasterを Master.MasterPageFile = "〜/ myMaster.master" をやってみました。マスター "

ですが、Master.myIntegerが認識されません。

私は何をしたいのか分かりません...この変数を取得するにはどんな考えですか?

+0

プロパティを他の場所に定義します。あなたがしようとしているのはベストプラクティスではありません。 – Khan

答えて

0

外部クラスからは、このような何か試してください:あなたは、外部クラスからマスターページへのアクセス権を持っていない場合は、プロパティやメソッドにアクセスするためにリフレクションを使用することができます

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    var value = ((MasterPageName)page.Master).SomeProperty; 
} 

を:

var page = HttpContext.Current.Handler as Page; 
if (page != null) 
{ 
    var value = page.Master.GetType().GetProperty("SomeProperty").GetValue(page.Master, null); 
} 
+0

Thxしかし私は理解できない(英語は私の母国語ではない:p)。 <%@ MasterType VirtualPath = "〜/ Themes/Default.master"%>をどこに書きますか?そして、virtualPathには何が含まれていると思われますか? – blop

+0

ページ・ディレクティブ(一番上のもの)のページ宣言の下に '%@ Page Language =" C# "...%>' –

4

Pageから継承しないクラスからMasterPageのプロパティを参照する必要がありますか?

このクラスをこの値で初期化するには、プロパティまたはコンストラクタを使用することをお勧めします。これは、エラーを起こしやすいとも硬いMasterPageであなたのクラスを結ぶこと

// works even in static context 
static void foo() 
{ 
    int myInteger = -1; 
    var page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page; 
    if(page != null) myInteger = ((myMaster)page.Master).myInteger; 
} 

注:あなたは本当にそれをこのように必要がある場合しかし、あなたはHttpContect.Current.Handlerを使用する以下の方法を試すことができます。

+0

しかし、私はプロパティでそれを行う方法がわかりません...(私は初心者です。ネット...)。より具体的にお願いしますか? – blop

+0

@blob:あなたのクラスを表示していないので、伝えにくいです。たとえば、ページから: 'Foo foo1 = new Foo(); foo1.myInteger =((myMaster)page.Master).myInteger; '(あなたのクラスは' myInteger'というプロパティを持っていると仮定します)。 –

関連する問題