web-dev-qa-db-ja.com

マスターページから表示されている子ページを特定する方法

マスターページでコードを書いていて、どの子(コンテンツ)ページが表示されているかを知る必要があります。これをプログラムでどのように実行できますか?

23
jinsungy

これは最初から悪い考えのように思えます。これはすべてのページに共通のコードであるため、マスターのアイデアは、どのページが存在するかを気にする必要がないということです。

10
Gord

私はこれを使います:

string pageName = this.ContentPlaceHolder1.Page.GetType().FullName;

このクラス名は「ASP.default_aspx」という形式で返されますが、ほとんどの目的で簡単に解析できます。

お役に立てば幸いです。

29
Todd H.

ContentPageMasterPageに通知させることをお勧めします。そのため、ContentPageにはMasterプロパティがあり、MasterPageにはChildプロパティがありません。この場合の最良の方法は、MasterPageのプロパティまたはメソッドを定義し、MasterContentPageプロパティを介してこれを使用することです。

この手法を使用する場合は、MasterPageのクラス名を明示的に指定するのが最善です。これにより、ContentPageでMasterPageが使用されます。

例:

//Page_Load
MyMaster m = (MyMaster)this.Master;

m.TellMasterWhoIAm(this);

お役に立てれば。

24
norbertB

マスターページで子ページをチェックする理由がありました。

マスターページにすべてのメニューオプションがあり、特定のシステム設定がセットアップされていない場合は、それらを無効にする必要があります。

そうでない場合は、メッセージが表示され、ボタンが無効になります。設定ページはこのマスターページのコンテンツページであるため、メッセージがすべての設定ページに表示され続けるのは望ましくありません。

このコードは私のために働きました:

                //Only show the message if on the dashboard (first page after login)
                if (this.ContentPlaceHolder1.Page is Dashboard)
                {
                    //Show modal message box
                    mmb.Show("Warning Message");
                }
8
WraithNath

以下のコードを使用してください。

Page.ToString().Replace("ASP.","").Replace("_",".")
7
Sarim Shekhani

以下を使用できます。

Request.CurrentExecutionFilePath

4
JoshBerke

これが私の問題の解決策です(このコードはマスターページの背後にあるコードに入ります):

if (Page.TemplateControl.AppRelativeVirtualPath == "~/YourPageName.aspx")
{
   // your code here
}

またはもう少し洗練されていますが、読みにくいです:

if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase))
{
   // your code here
}
3
SHS
Request.CurrentExecutionFilePath;

または

Request.AppRelativeCurrentExecutionFilePath;
1
Challa Jyothi

私のプロジェクトでは、これと同様のことを行って、読み込まれているページに基づいてcssファイルを動的に添付しています。リクエストからファイルの名前を取得するだけです:

this.Request.Url.AbsolutePath

そして、そこからファイル名を抽出します。ただし、URLの書き換えを行っている場合、これが機能するかどうかはわかりません。

0
spilliton
string s =   Page.ToString().Replace("ASP.directory_name_","").Replace("_aspx",".aspx").Replace("_","-");
        if (s == "default.aspx")
              { /* do something */ }
0
Shadi Namrouti

リクエストの最後のセグメントを取得することでこれを行うことができ、私はフォーム名になります

string pageName = this.Request.Url.Segments.Last(); 

if (pageName.Contains("EmployeeTermination.aspx"))
{

}
0
Emad Mokhtar

私が使っているたくさんの答え

<%if(this.MainContent.Page.Title != "mypagetitle") { %>
<%}%>

これにより、単一のページを簡単に除外できます。文字列を比較するため、exclude_pagetitleのようにページにプレフィックスを付けて、タイトルのサブ文字列を比較することもできます。これを一般的に使用して、セッションタイムアウトやライブチャットなど、ロードしたくない特定の機能からログインページを除外します。

0
Vinez

以下のコードは、魅力的なように機能しました。

string PName = Request.UrlReferrer.Segments[Request.UrlReferrer.Segments.Length - 1];
0
sandip shaw

あなたはこれを試すことができます:

<%: this.ContentPlaceHolder1.Page.GetType().Name.Split('_')[0].ToUpper() %>

そのコードをSite.Mastertitleタグ内に配置します

0
sebprime