Как определить, какая дочерняя страница отображается на главной странице? - PullRequest
21 голосов
/ 06 ноября 2008

Я пишу код на главной странице, и мне нужно знать, какая дочерняя (контентная) страница отображается. Как я могу сделать это программно?

Ответы [ 16 ]

28 голосов
/ 09 июля 2010

Я использую это:

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

Он повторяет имя класса в этом формате "ASP.default_aspx", но я считаю, что его легко анализировать для большинства целей.

Надеюсь, это поможет!

24 голосов
/ 06 ноября 2008

Лучше позволить ContentPage уведомить MasterPage. Вот почему ContentPage имеет свойство Master, а MasterPage не имеет Child. Лучше всего определить свойство или метод для MasterPage и использовать это через свойство Master ContentPage.

Если вы используете эту технику, лучше явно указать имя класса для MasterPage. Это позволяет использовать MasterPage в ContentPage.

Пример:

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

m.TellMasterWhoIAm(this);

Надеюсь, это поможет.

10 голосов
/ 06 ноября 2008

Звучит как плохая идея для начала. Идея мастера заключается в том, что ему не важно, какая там страница, так как это общий код для каждой страницы.

8 голосов
/ 23 августа 2010

У меня была причина проверить дочернюю страницу на главной странице.

У меня есть все пункты меню на главной странице, и их необходимо отключить, если не настроены определенные системные настройки.

Если их нет, отображается сообщение и кнопки отключены. Поскольку страница настроек является страницей содержимого с этой главной страницы, я не хочу, чтобы сообщение продолжало отображаться на всех страницах настроек.

у меня этот код работал:

                //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");
                }
7 голосов
/ 08 июля 2013

Используйте код ниже.

Page.ToString().Replace("ASP.","").Replace("_",".")
4 голосов
/ 06 ноября 2008

Вы можете использовать:

Request.CurrentExecutionFilePath

3 голосов
/ 30 июля 2015

Вот мое решение проблемы (этот код входит в код за главной страницей):

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

или немного сложнее, но менее читабельно:

if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase))
{
   // your code here
}
1 голос
/ 25 марта 2014
Request.CurrentExecutionFilePath;

или

Request.AppRelativeCurrentExecutionFilePath;
0 голосов
/ 24 ноября 2017

Ниже код работает как зачарованный .. попробуйте это

строка PName = Request.UrlReferrer.Segments [Request.UrlReferrer.Segments.Length - 1];

0 голосов
/ 20 апреля 2016

столько ответов я использую

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

это позволяет легко исключить любую отдельную страницу, и поскольку вы сравниваете строку, вы можете даже добавить префикс страниц, например exclude_pagetitle, и сравнить подстроку заголовка. Обычно я использую это, чтобы исключить страницы входа в систему из определенных функций, которые я не хочу загружать, например, тайм-ауты сеансов и чат.

...