マスターページでコードを書いていて、どの子(コンテンツ)ページが表示されているかを知る必要があります。これをプログラムでどのように実行できますか?
これは最初から悪い考えのように思えます。これはすべてのページに共通のコードであるため、マスターのアイデアは、どのページが存在するかを気にする必要がないということです。
私はこれを使います:
string pageName = this.ContentPlaceHolder1.Page.GetType().FullName;
このクラス名は「ASP.default_aspx」という形式で返されますが、ほとんどの目的で簡単に解析できます。
お役に立てば幸いです。
ContentPage
にMasterPage
に通知させることをお勧めします。そのため、ContentPage
にはMaster
プロパティがあり、MasterPage
にはChild
プロパティがありません。この場合の最良の方法は、MasterPage
のプロパティまたはメソッドを定義し、Master
のContentPage
プロパティを介してこれを使用することです。
この手法を使用する場合は、MasterPageのクラス名を明示的に指定するのが最善です。これにより、ContentPageでMasterPageが使用されます。
例:
//Page_Load
MyMaster m = (MyMaster)this.Master;
m.TellMasterWhoIAm(this);
お役に立てれば。
マスターページで子ページをチェックする理由がありました。
マスターページにすべてのメニューオプションがあり、特定のシステム設定がセットアップされていない場合は、それらを無効にする必要があります。
そうでない場合は、メッセージが表示され、ボタンが無効になります。設定ページはこのマスターページのコンテンツページであるため、メッセージがすべての設定ページに表示され続けるのは望ましくありません。
このコードは私のために働きました:
//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");
}
以下のコードを使用してください。
Page.ToString().Replace("ASP.","").Replace("_",".")
以下を使用できます。
これが私の問題の解決策です(このコードはマスターページの背後にあるコードに入ります):
if (Page.TemplateControl.AppRelativeVirtualPath == "~/YourPageName.aspx")
{
// your code here
}
またはもう少し洗練されていますが、読みにくいです:
if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase))
{
// your code here
}
Request.CurrentExecutionFilePath;
または
Request.AppRelativeCurrentExecutionFilePath;
私のプロジェクトでは、これと同様のことを行って、読み込まれているページに基づいてcssファイルを動的に添付しています。リクエストからファイルの名前を取得するだけです:
this.Request.Url.AbsolutePath
そして、そこからファイル名を抽出します。ただし、URLの書き換えを行っている場合、これが機能するかどうかはわかりません。
string s = Page.ToString().Replace("ASP.directory_name_","").Replace("_aspx",".aspx").Replace("_","-");
if (s == "default.aspx")
{ /* do something */ }
リクエストの最後のセグメントを取得することでこれを行うことができ、私はフォーム名になります
string pageName = this.Request.Url.Segments.Last();
if (pageName.Contains("EmployeeTermination.aspx"))
{
}
私が使っているたくさんの答え
<%if(this.MainContent.Page.Title != "mypagetitle") { %>
<%}%>
これにより、単一のページを簡単に除外できます。文字列を比較するため、exclude_pagetitleのようにページにプレフィックスを付けて、タイトルのサブ文字列を比較することもできます。これを一般的に使用して、セッションタイムアウトやライブチャットなど、ロードしたくない特定の機能からログインページを除外します。
以下のコードは、魅力的なように機能しました。
string PName = Request.UrlReferrer.Segments[Request.UrlReferrer.Segments.Length - 1];
あなたはこれを試すことができます:
<%: this.ContentPlaceHolder1.Page.GetType().Name.Split('_')[0].ToUpper() %>
そのコードをSite.Master
のtitle
タグ内に配置します