2009-05-27 11 views
1

私は最初のMasterPageを配線しています。これは従来のアプリです。私はすべてのコンテンツページが継承する古いBasePageクラスを持っています。 System.Web.UI.Pageから継承しますが、コンテンツ自体はありません(.aspxファイルはありません)。これは、ユーザー認証/ロール付与メニュービルディングの束を実行します。私はこの機能を維持したいが、メニューを構築するために私のMasterPageのコントロールを設定するためにそれを使用する。私の人生では、コンテンツページでMasterType宣言なしでMasterPageプロパティを参照する方法を理解できません。ASP.NETのコンテンツページの一部ではないクラスからマスタページのプロパティにアクセスする

私のマスターページクラスはNIMS_Masterと呼ばれ、私は(ちょうど始めるしようとする)ことで、次のいます
<%@ MasterType VirtualPath="~/NIMS_Master.master" %>

:私のコンテンツページの一つでMasterType宣言で

public partial class NIMS_Master : System.Web.UI.MasterPage { public string MenuList { get; set; }

protected void Page_Load(object sender, EventArgs e) 
    {} 
    } 

次のように

私はLogin.aspx.csで私のプロパティにアクセスすることができます

this.Master.MenuList = "this is the menu list";

しかし、私のBasePage.csでは、私はどこにもMasterType宣言を置くことができません。すべてのGoogle検索では、NIMS_Masterクラスをマスターとしてキャストする必要があることが示されていますが、私の人生を保存するためには機能しません。私はいくつかのことを試しましたが、私のNIMS_MasterクラスはBasePageに表示されません。

((this.Master)NIMS_Master).MenuList = "This is a menu list";

BasePage.cs私にApp_Codeディレクトリ内にあり、それが重要な場合は、私のマスターページファイルは、アプリケーションのルートです。私はそれを見たよう

答えて

1

だから私にApp_Codeの私のBasePageクラスだったとしていた私のNIMS_Masterクラスのプロパティを設定しようとしていましたアプリケーションルートディレクトリ。私は、App_CodeのSystem.Web.UI.MasterPageから継承し、そこでプロパティを配置するMasterBaseクラスを作成しなければなりませんでした。 Sheesh、私はなぜ私がapp_codeの中からそれらのクラスのプロパティにアクセスできると思ったのかもわかりません。

1

、あなたのキャストは次のようになります((NIMS_Master)this.Master).MenuList

+0

おっと、そうです。私は私が知っている\t エラー型または名前空間名「NIMS_Masterは」(あなたがusingディレクティブまたはアセンブリ参照が不足している?)が見つかりませんでした。しかし、これは私がすることを試みるとき私が得るものです私のNIMS_Masterクラスを私のBasePageクラスに公開するためにここに単純なものがありません。 – fr0man

0

MasterBaseも私のために働いてくれました。

私のケースでは、master.aspx.csファイルにpublicプロパティがあり、これを新しいMasterBaseクラスに移動して他のクラスに公開することができました。

手順1:App_Codeディレクトリに新しいMasterBase.csファイルを作成します。 (以下は、私の完全なクラスです。)

public partial class MasterBase : System.Web.UI.MasterPage 
{ 
    public string MyProperty = "Default"; 
} 

ステップ2:Master.aspx.csではなくSystem.Web.UI.MasterPageのあなたの基本クラスから継承するファイルを更新し、任意のプロパティの宣言を削除することをおMasterBaseクラスに移動しました。 (以下は、クラスの最初の数行である。)

public partial class Master : MasterBase 
{ 
    //The following is now defined in MasterBase. 
    //public string MyProperty = "Default"; 
... 

ステップ3:それはプロパティのアクセスするMasterBaseするpage.Masterキャスト。

... 
    IHttpHandler page = HttpContext.Current.Handler; 
    if (page is System.Web.UI.Page) 
    { 
     MasterBase masterPage = (MasterBase)((System.Web.UI.Page)page).Master; 
     if (masterPage != null) 
      masterPage.MyProperty = "New Value"; 
    } 
... 
関連する問題