2008-11-06 17 views

Respuesta

10

Esto suena como una mala idea para empezar. La idea del maestro es que no debería importar qué página hay, ya que este es el código común para cada página.

+3

+1 Exactamente. Esto va mucho en contra de lo que es una página maestra. – NotMe

+7

Esta es una buena regla general, pero ¿qué tal algo así como un rastro de pan? Lo quiere en cada página, pero necesita saber qué página específica está cargada para determinar las migas. Para esto expongo típicamente una función pública en la página maestra para establecer la miga final, esto es llamado por la página. Las otras migas están determinadas por el mapa del sitio. – spilliton

+1

¿Cuál sería su recomendación si su página maestra contuviera lógica para redirigir a una página 'segura' bajo ciertas circunstancias A MENOS QUE se visualizara la página segura? –

-2

Page.Request.Url.PathAndQuery o una de las otras propiedades del objeto URI URL deben estar disponibles para usted desde el código de la página principal.

0

Hago algo similar a esto en un proyecto mío para adjuntar dinámicamente archivos CSS basados ​​en la página que se está cargando. Acabo de obtener el nombre del archivo de la solicitud:

this.Request.Url.AbsolutePath 

Y luego extraer el nombre del archivo de allí. No estoy seguro de si esto funcionará si usted está haciendo reescrituras URL sin embargo.

-4

puede comprobar el tipo de página en el código subyacente:

// Assuming MyPage1, MyPage2, and MyPage3 are the class names in your aspx.cs files: 

if (this.Page is MyPage1) 
{ 
    // do MyPage1 specific stuff 
} 
else if (this.Page is MyPage2) 
{ 
    // do MyPage2 specific stuff 
} 
else if (this.Page is MyPage3) 
{ 
    // do MyPage3 specific stuff 
} 
+0

Esto es lo que esperaría también, pero esto no funciona. ÁSPID.NET parece destruir las declaraciones de clase (molestamente!) Así que mientras parece que declaras 'MyPage1', en realidad no lo eres. Obtiene algo como 'ASP.MyPage1_aspx', y no puede hacer referencia a este tipo en tiempo de compilación. –

23

Es mejor dejar que el ContentPage notificar al MasterPage. Es por eso que el ContentPage tiene una propiedad Master y MasterPage no tiene la propiedad Child. La mejor práctica en esto es definir una propiedad o método en el MasterPage y usar esto a través de la propiedad Master del ContentPage.

Si utiliza esta técnica, es mejor especificar explícitamente el nombre de clase para la página maestra. Esto hace que se use la página maestra en la página de contenido.

Ejemplo:

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

m.TellMasterWhoIAm(this); 

Espero que esto ayude.

+0

Me gusta esto. A veces, la página maestra * necesita * necesita un poco de información de sus usuarios. Esta es una forma limpia de hacerlo. –

+0

Esta es una buena solución a la pregunta. Lo que el cartel original preguntaba cómo hacer no era realmente una buena práctica a seguir, y ofreciste una solución que dirigía al OP a seguir una mejor práctica. Gracias @norbertB! –

26

Yo uso este:

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

Se Retuns el nombre de la clase en este formato "ASP.default_aspx", pero me parece que puede analizar fácilmente para la mayoría de los propósitos.

Espero que ayude!

+5

Puede usar 'string pageName = this.ContentPlaceHolder1.Page.GetType(). BaseType.Name;' Esto devuelve el tipo de clase base de la página secundaria. Para la mayoría de los casos, proporciona la dirección de página sin la etiqueta "aspx". Por ejemplo, "Predeterminado". –

8

He tenido un motivo para verificar la página secundaria en la página maestra.

Tengo todas las opciones de menú en mi página maestra y deben deshabilitarse si ciertas configuraciones del sistema no están configuradas.

Si no lo están, se muestra un mensaje y los botones están deshabilitados. Como la página de configuración es una página de contenido de esta página maestra, no quiero que el mensaje siga apareciendo en todas las páginas de configuración.

este código trabajó para mí:

   //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"); 
       } 
+0

Estoy usando VB y esto funciona para mí: si ContentPlaceHolder1.Page.GetType(). BaseType es GetType (Dashboard) –

0

Usted puede hacer esto consiguiendo el último segmant o la solicitud y voy a ser el nombre del formulario

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

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

} 
7

usar el siguiente código.

Page.ToString().Replace("ASP.","").Replace("_",".") 
+0

Muchas gracias. funcionó Es decir, podemos llegar a cualquier página desde la página maestra ... –

+0

esta fue mi solución, necesitaba el nombre de la página de contenido para evaluar una función que debería o no mostrar una etiqueta – Bachask8

0

Usted puede probar esto:

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

Ponga ese código dentro de las etiquetas de la titleSite.Master

0
Request.CurrentExecutionFilePath; 

o

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

Aquí está mi solución al problema (el código entra en el código detrás de la página maestra):

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

o un poco más sofisticado, pero menos legible:

if (Page.TemplateControl.AppRelativeVirtualPath.Equals("~/YourPageName.aspx", StringComparison.OrdinalIgnoreCase)) 
{ 
    // your code here 
} 
0

por lo muchas respuestas Estoy utilizando

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

Esto hace que sea fácil de excluir una sola página y desde su comparación una cadena incluso podría prefijar páginas como exclude_pagetitle y comparar una subcadena del título. Lo uso comúnmente para excluir las páginas de inicio de sesión de ciertas funciones que no quiero cargar, como los tiempos de espera de la sesión y el chat en vivo.

0

A continuación código funcionó como un ..try encantada que

cadena Pname = Request.UrlReferrer.Segments [Request.UrlReferrer.Segments.Length - 1];

Cuestiones relacionadas