Interactuar con la página maestra desde la página de contenido (VB)

por Scott Mitchell

Examina cómo llamar a métodos, establecer propiedades, etc. de la Página maestra desde el código de la Página de contenido.

Introducción

En el transcurso de los últimos cinco tutoriales hemos visto cómo crear una Página maestra, definir regiones de contenido, enlazar páginas ASP.NET a una Página maestra y definir contenido específico de la página. Cuando un visitante solicita una página de contenido determinada, el contenido y el marcado de las páginas maestras se fusionan en tiempo de ejecución, lo que da lugar a la representación de una jerarquía de control unificada. Por lo tanto, ya hemos visto una manera en la que la página maestra y una de sus páginas de contenido pueden interactuar: la página de contenido escribe el marcado para transfuir en los controles ContentPlaceHolder de la página maestra.

Lo que todavía tenemos que examinar es cómo la página maestra y la página de contenido pueden interactuar mediante programación. Además de definir el marcado para los controles ContentPlaceHolder de la página maestra, una página de contenido también puede asignar valores a las propiedades públicas de su página maestra e invocar sus métodos públicos. De forma similar, una página maestra puede interactuar con sus páginas de contenido. Aunque la interacción mediante programación entre una página maestra y de contenido es menos común que la interacción entre sus marcados declarativos, hay muchos escenarios en los que se necesita dicha interacción mediante programación.

En este tutorial se examina cómo una página de contenido puede interactuar mediante programación con su página maestra; en el siguiente tutorial veremos cómo la página maestra puede interactuar de forma similar con sus páginas de contenido.

Ejemplos de interacción mediante programación entre una Página de contenido y su Página maestra

Cuando es necesario configurar una región determinada de una página por página, usamos un control ContentPlaceHolder. Pero, ¿qué ocurre con las situaciones en las que la mayoría de las páginas necesitan emitir una salida determinada, pero un pequeño número de páginas necesita personalizarla para mostrar otra cosa? Un ejemplo de este tipo, que examinamos en el tutorial Multiple ContentPlaceHolders y Contenido predeterminado, implica mostrar una interfaz de inicio de sesión en cada página. Aunque la mayoría de las páginas deben incluir una interfaz de inicio de sesión, debe suprimirse para una serie de páginas, como: la página de inicio de sesión principal (Login.aspx); la página Crear cuenta y otras páginas que solo son accesibles para los usuarios autenticados. El tutorial Multiple ContentPlaceHolders y Contenido predeterminado mostró cómo definir el contenido predeterminado para un ContentPlaceHolder en la página maestra y, a continuación, cómo reemplazarlo en esas páginas donde no se quería el contenido predeterminado.

Otra opción es crear una propiedad pública o un método dentro de la página maestra que indica si se va a mostrar u ocultar la interfaz de inicio de sesión. Por ejemplo, la página maestra podría incluir una propiedad pública denominada ShowLoginUI cuyo valor se usó para establecer la Visible propiedad del control Login en la página maestra. Esas páginas de contenido en las que se debe suprimir la interfaz de usuario de inicio de sesión podrían establecer mediante programación la ShowLoginUI propiedad en False.

Quizás el ejemplo más común de interacción de contenido y página maestra se produce cuando los datos mostrados en la página maestra deben actualizarse después de que alguna acción haya transcurrido en la página de contenido. Considere una página maestra que incluya una clase GridView que muestre los cinco registros agregados más recientemente de una tabla de base de datos determinada y que una de sus páginas de contenido incluya una interfaz para agregar nuevos registros a esa misma tabla.

Cuando un usuario visita la página para agregar un nuevo registro, ve los cinco registros agregados más recientemente mostrados en la página maestra. Después de rellenar los valores de las columnas del nuevo registro, envía el formulario. Suponiendo que GridView de la página maestra tiene su EnableViewState propiedad establecida en True (el valor predeterminado), su contenido se vuelve a cargar desde el estado de vista y, por lo tanto, se muestran los cinco mismos registros aunque se acaba de agregar un registro más reciente a la base de datos. Esto puede confundir al usuario.

Nota:

Aunque deshabilite el estado de vista de GridView para que se vuelva a enlazar a su origen de datos subyacente en cada postback, todavía no mostrará el registro recién agregado porque los datos están enlazados a GridView anteriormente en el ciclo de vida de la página que cuando se agrega el nuevo registro a la base de datos.

Para solucionar este problema para que el registro recién agregado se muestre en GridView de la página maestra en postback, es necesario indicar a GridView que vuelva a enlazarse a su origen de datos después de que se haya agregado el nuevo registro a la base de datos. Esto requiere la interacción entre el contenido y las páginas maestras porque la interfaz para agregar el nuevo registro (y sus controladores de eventos) se encuentran en la página de contenido, pero GridView que debe actualizarse se encuentra en la página maestra.

Dado que actualizar la presentación de la página maestra desde un controlador de eventos en la página de contenido es una de las necesidades más comunes para la interacción de contenido y página maestra, vamos a explorar este tema con más detalle. La descarga de este tutorial incluye una base de datos de Microsoft SQL Server 2005 Express Edition denominada NORTHWIND.MDF en la carpeta del App_Data sitio web. La base de datos Northwind almacena información de productos, empleados y ventas para una empresa ficticia, Northwind Traders.

En el paso 1 se explica cómo mostrar los cinco productos agregados más recientemente en GridView en la página maestra. El paso 2 crea una página de contenido para agregar nuevos productos. El paso 3 examina cómo crear propiedades y métodos públicos en la página maestra y el paso 4 muestra cómo interactuar mediante programación con estas propiedades y métodos de la página de contenido.

Nota:

Este tutorial no profundiza en los detalles de cómo trabajar con datos en ASP.NET. Los pasos para configurar la página maestra para mostrar los datos y la página de contenido para insertar datos están completos, pero con mayor brevedad. Para obtener una visión más detallada de la visualización e inserción de datos y el uso de los controles SqlDataSource y GridView, consulte los recursos de la sección Lecturas adicionales al final de este tutorial.

Paso 1: Mostrar los cinco productos agregados más recientemente en la Página maestra

Abra la página maestra Site.master y agregue un control Label y GridView a leftContent<div>. Borre la propiedad de EtiquetasText, establezca su EnableViewState propiedad enFalse y su ID propiedad en GridMessage; establezca la ID propiedad de RecentProductsGridView en. A continuación, en el Diseño, expanda la etiqueta inteligente de GridView y elija enlazarla a un nuevo origen de datos. Esto inicia el Asistente para configuración del origen de datos. Dado que la base de datos Northwind de la App_Data carpeta es una base de datos de Microsoft SQL Server, elija crear un objeto SqlDataSource seleccionando (vea la figura 1); asigne un nombre a SqlDataSource RecentProductsDataSource.

Bind the GridView to a SqlDataSource Control Named RecentProductsDataSource

Figura 01: enlazar GridView a un control SqlDataSource denominado RecentProductsDataSource (Haga clic para ver la imagen de tamaño completo)

El siguiente paso nos pide que especifique a qué base de datos se va a conectar. Elija el NORTHWIND.MDF archivo de base de datos en la lista desplegable y haga clic en Siguiente. Dado que esta es la primera vez que hemos usado esta base de datos, el asistente ofrecerá almacenar la cadena de conexión en Web.config. Haga que almacene la cadena de conexión con el nombre NorthwindConnectionString.

Connect to the Northwind Database

Figura 02: conectarse a la base de datos Northwind (Haga clic para ver la imagen de tamaño completo)

El asistente para configurar Orígenes de datos proporciona dos medios para especificar la consulta utilizada para recuperar datos:

  • Al especificar una instrucción SQL personalizada o un procedimiento almacenado, o
  • Al seleccionar una tabla o vista y, a continuación, especificar las columnas que se van a devolver

Dado que queremos devolver solo los cinco productos agregados recientemente, es necesario especificar una instrucción SQL personalizada. Use la consulta SELECT siguiente:

SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC

La TOP 5 palabra clave devuelve solo los cinco primeros registros de la consulta. La Products clave principal de la tabla, ProductID, es una IDENTITY columna, que nos asegura de que cada nuevo producto agregado a la tabla tendrá un valor mayor que la entrada anterior. Por lo tanto, la ordenación de los resultados por ProductID orden descendente devuelve los productos a partir de los creados más recientemente.

Return the Five Most Recently Added Products

Figura 03: Devolver los Cinco productos agregados recientemente (haga clic para ver la imagen de tamaño completo)

Después de completar el asistente, Visual Studio genera dos BoundFields para que GridView muestre los campos ProductName y UnitPrice devueltos de la base de datos. En este momento, el marcado declarativo de la página maestra debe incluir marcado similar al siguiente:

<asp:Label ID="GridMessage" runat="server" EnableViewState="false"></asp:Label> 
<asp:GridView ID="RecentProducts" runat="server" AutoGenerateColumns="False" 
 DataSourceID="RecentProductsDataSource">
 <Columns> 
 <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
 SortExpression="ProductName" /> 
 <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" 
 SortExpression="UnitPrice" /> 
 </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="RecentProductsDataSource" runat="server" 
 ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
 SelectCommand="SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC"> 
</asp:SqlDataSource>

Como puede ver, el marcado contiene: el control Web etiqueta (GridMessage); GridView RecentProducts, con dos BoundFields; y un control SqlDataSource que devuelve los cinco productos agregados más recientemente.

Con esta clase GridView creada y su control SqlDataSource configurado, visite el sitio web a través de un navegador. Como se muestra en la figura 4, verá una cuadrícula en la esquina inferior izquierda que enumera los cinco productos agregados recientemente.

The GridView Displays the Five Most Recently Added Products

Figura 04: GridView muestra los cinco productos agregados recientemente (haga clic para ver la imagen de tamaño completo)

Nota:

No dude en limpiar la apariencia de GridView. Algunas sugerencias incluyen dar formato al valor mostrado UnitPrice como moneda y usar colores y fuentes de fondo para mejorar la apariencia de la cuadrícula.

Paso 2: Crear una Página de contenido para agregar nuevos productos

Nuestra siguiente tarea consiste en crear una página de contenido a partir de la cual un usuario puede agregar un nuevo producto a la Productstabla. Agregue una nueva página de contenido a la Admin carpeta denominada AddProduct.aspx, asegurándose de enlazarla a la página maestra de Site.master. En la figura 5 se muestra el Explorador de soluciones después de agregar esta página al sitio web.

Add a New ASP.NET Page to the Admin Folder

Figura 05: Agregar una nueva página de ASP.NET a laAdmincarpeta (Haga clic para ver la imagen de tamaño completo)

Recuerde que en el Especificar el título, las etiquetas meta y otros encabezados HTML del tutorial Página maestra creamos una clase BasePage de página base personalizada denominada que generó el título de la página si no se estableció explícitamente. Vaya a la clase de código subyacente de la AddProduct.aspx página y haga que derive de BasePage (en lugar de System.Web.UI.Page).

Actualice el archivo Web.sitemap para incluir una entrada para esta lección. Agregue el siguiente marcado debajo del <siteMapNode> para la lección Problemas de nomenclatura de identificadores de control:

<siteMapNode url="~/Admin/AddProduct.aspx" title="Content to Master Page Interaction" />

Como se muestra en la figura 6, la adición de este elemento <siteMapNode> se refleja en la lista Lecciones.

Vuelva a AddProduct.aspx. En el Control de contenido del MainContent ContentPlaceHolder, agregue un control DetailsView y asígnele el nombre NewProduct. Enlace DetailsView a un nuevo control SqlDataSource denominado NewProductDataSource. Al igual que con SqlDataSource en el Paso 1, configure el asistente para que use la base de datos Northwind y elija especificar una instrucción SQL personalizada. Dado que DetailsView se usará para agregar elementos a la base de datos, es necesario especificar una SELECT instrucción y una INSERT instrucción. Use la consulta SELECT siguiente:

SELECT ProductName, UnitPrice FROM Products

A continuación, en la pestaña INSERT, agregue la siguiente INSERT instrucción:

INSERT INTO Products(ProductName, UnitPrice) VALUES(@ProductName, @UnitPrice)

Después de completar el asistente, vaya a la etiqueta inteligente DetailsView y active la casilla "Habilitar inserción". Esto agrega un CommandField a DetailsView con su ShowInsertButton propiedad establecida en True. Dado que este DetailsView se usará únicamente para insertar datos, establezca la propiedad DefaultModeDetailsView enInsert.

Eso es todo. Vamos a probar esta página. Visite AddProduct.aspx a través de un explorador, escriba un nombre y un precio (vea la figura 6).

Add a New Product to the Database

Figura 06: Agregar una nueva tabla a la base de datos (Haga clic para ver la imagen de tamaño completo)

Después de escribir el nombre y el precio del nuevo producto, haga clic en el botón Insertar. Esto hace que el formulario se postback. En postback, se ejecuta la instrucción del INSERT control SqlDataSource; sus dos parámetros se rellenan con los valores especificados por el usuario en los dos controles TextBox de DetailsView. Desafortunadamente, no hay comentarios visuales que se haya producido una inserción. Sería bueno que se muestre un mensaje, confirmando que se ha agregado un nuevo registro. Lo dejo como ejercicio para el lector. Además, después de agregar un nuevo registro desde DetailsView the GridView en la página maestra sigue apareciendo los mismos cinco registros que antes; no incluye el registro recién agregado. Examinaremos cómo solucionar esto en los próximos pasos.

Nota:

Además de agregar alguna forma de comentarios visuales que la inserción se ha realizado correctamente, le recomendamos que actualice también la interfaz de inserción de DetailsView para incluir la validación. Actualmente, no hay ninguna validación. Si un usuario escribe un valor no válido para el UnitPrice campo, como "Demasiado caro", se producirá una excepción en postback cuando el sistema intente convertir esa cadena en un decimal. Para obtener más información sobre cómo personalizar la interfaz de inserción, consulte el tutorial Personalización de la interfaz de modificación de datos de mi serie de tutoriales Trabajar con datos.

Paso 3: Crear propiedades públicas y métodos en la página maestra

En el paso 1, agregamos un control web etiqueta denominado GridMessage encima de GridView en la Página maestra. Esta etiqueta está pensada para mostrar opcionalmente un mensaje. Por ejemplo, después de agregar un nuevo registro a la tabla Products, es posible que deseemos mostrar un mensaje que diga: "ProductName se ha agregado a la base de datos." En lugar de codificar de forma rígida el texto de esta etiqueta en la página maestra, es posible que el mensaje sea personalizable por la página de contenido.

Dado que el control Label se implementa como una variable miembro protegida dentro de la página maestra, no se puede tener acceso directamente desde las páginas de contenido. Para trabajar con la etiqueta dentro de una página maestra desde la página de contenido (o, por ese motivo, cualquier control web de la página maestra) necesitamos crear una propiedad pública en la página maestra que expone el control Web o actúa como proxy por el que se puede tener acceso a una de sus propiedades. Agregue la siguiente sintaxis a la clase de código subyacente de la página maestra para exponer la Text propiedad de las etiquetas:

Public Property GridMessageText() As String 
 Get
 Return GridMessage.Text 
 End Get 
 Set(ByVal Value As String) 
 GridMessage.Text = Value 
 End Set 
End Property

Cuando se agrega un nuevo registro a la Products tabla desde una página de contenido, RecentProducts GridView en la página maestra debe volver a enlazarse a su origen de datos subyacente. Para volver a enlazar GridView, llame a su DataBind método. Dado que gridView de la página maestra no es accesible mediante programación para las páginas de contenido, es necesario crear un método público en la página maestra que, cuando se llama, vuelve a enlazar los datos a GridView. Agregue el código siguiente a la clase de código subyacente de la página maestra:

Public Sub RefreshRecentProductsGrid() 
 RecentProducts.DataBind()
End Sub

Con la GridMessageText propiedad y RefreshRecentProductsGrid el método implementado, cualquier página de contenido puede establecer o leer mediante programación el valor de la propiedad de la GridMessage etiqueta Text o volver a enlazar los datos a GridView.RecentProducts El paso 4 examina cómo acceder a las propiedades y métodos públicos de la página maestra desde una página de contenido.

Nota:

No olvide marcar las propiedades y los métodos de la página maestra como Public. Si no denota explícitamente estas propiedades y métodos como Public, no serán accesibles desde la página de contenido.

Paso 4: Llamar a los miembros públicos de la Página maestra desde una página de contenido

Ahora que la página maestra tiene las propiedades y métodos públicos necesarios, estamos listos para invocar estas propiedades y métodos desde la AddProduct.aspx página de contenido. En concreto, es necesario establecer la propiedad de la página maestra GridMessageText y llamar a su RefreshRecentProductsGrid método después de agregar el nuevo producto a la base de datos. Todos los ASP.NET controles web de datos activan eventos inmediatamente antes y después de completar varias tareas, lo que facilita a los desarrolladores de páginas realizar alguna acción mediante programación antes o después de la tarea. Por ejemplo, cuando el usuario final hace clic en el botón Insertar de DetailsView, en postback, DetailsView genera su ItemInserting evento antes de comenzar el flujo de trabajo de inserción. A continuación, inserta el registro en la base de datos. Después de eso, DetailsView genera su ItemInserted evento. Por lo tanto, para trabajar con la página maestra después de agregar el nuevo producto, cree un controlador de eventos para el evento DetailsView ItemInserted.

Hay dos maneras de que una página de contenido pueda interactuar mediante programación con su página maestra:

  • Mediante la Page.Master propiedad, que devuelve una referencia de tipo flexible a la página maestra, o
  • Especifique el tipo de página maestra o la ruta de acceso del archivo de la página a través de una @MasterType directiva; esto agrega automáticamente una propiedad fuertemente tipada a la página denominada Master.

Vamos a examinar ambos enfoques.

Uso de la propiedadPage.Mastercon tipo flexible

Todas las páginas ASP.NET derivan de la Pageclase, que se encuentra en el System.Web.UI espacio de nombres. La Page clase incluye una Master propiedad que devuelve una referencia a la página maestra de la página. Si la página no tiene una página maestra Master devuelve Nothing.

La Master propiedad devuelve un objeto de tipo MasterPage (que también se encuentra en el System.Web.UI espacio de nombres), que es el tipo base del que derivan todas las páginas maestras. Por lo tanto, para usar propiedades públicas o métodos definidos en la página maestra de nuestro sitio web, debemos convertir el MasterPage objeto devuelto de la Master propiedad al tipo adecuado. Dado que denominamos nuestro archivo de página maestraSite.master, la clase de código subyacente se denominaba Site. Por lo tanto, el código siguiente convierte la Page.Master propiedad en una instancia de la Site clase.

' Cast the loosely-typed Page.Master property and then set the GridMessageText property 
Dim myMasterPage As Site = CType(Page.Master, Site)

Ahora que hemos convertido la propiedad de tipo Page.Master flexible al tipo De sitio, podemos hacer referencia a las propiedades y métodos específicos del sitio. Como se muestra en la figura 7, la propiedad GridMessageText pública aparece en la lista desplegable IntelliSense.

IntelliSense Shows our Master Page's Public Properties and Methods

Figura 07: IntelliSense muestra las propiedades y métodos públicos de la Página maestra (haga clic para ver la imagen de tamaño completo)

Nota:

Si ha llamado al archivo de página maestra MasterPage.master el nombre de clase de código subyacente de la página maestra es MasterPage. Esto puede provocar código ambiguo al convertir desde el tipo System.Web.UI.MasterPage a la MasterPage clase. En resumen, debe calificar completamente el tipo al que va a convertir, lo que puede ser un poco complicado al usar el modelo de proyecto de sitio web. Mi sugerencia sería asegurarse de que al crear la página maestra se le asigna un nombre distinto de MasterPage.master o, incluso mejor, crear una referencia fuertemente tipada a la página maestra.

Creación de una referencia fuertemente tipada con la@MasterTypeDirectiva

Si observa detenidamente, puede ver que una clase de código subyacente de ASP.NET página es una clase parcial (tenga en cuenta la Partial palabra clave en la definición de clase). Las clases parciales se introdujeron en C# y Visual Basic with.NET Framework 2.0 y, en pocas palabras, permiten definir los miembros de una clase en varios archivos. El archivo de clase de código subyacente AddProduct.aspx.vb, por ejemplo, contiene el código que creamos, el desarrollador de páginas. Además de nuestro código, el motor de ASP.NET crea automáticamente un archivo de clase independiente con propiedades y controladores de eventos en que traducen el marcado declarativo en la jerarquía de clases de la página.

La generación automática de código que se produce cada vez que se visita una página de ASP.NET allana el camino para algunas posibilidades bastante interesantes y útiles. En el caso de las páginas maestras, si se indica al motor de ASP.NET qué página maestra usa nuestra página de contenido, genera una Master propiedad fuertemente tipada para nosotros.

Use la @MasterType directiva para informar al motor de ASP.NET del tipo de página maestra de la página de contenido. La @MasterType directiva puede aceptar el nombre de tipo de la página maestra o su ruta de acceso de archivo. Para especificar que la AddProduct.aspx página usa Site.master como página maestra, agregue la siguiente directiva a la parte superior de AddProduct.aspx:

<%@ MasterType VirtualPath="~/Site.master" %>

Esta directiva indica al motor de ASP.NET que agregue una referencia fuertemente tipada a la página maestra a través de una propiedad denominada Master. Con la @MasterType directiva en vigor, podemos llamar Site.master a las propiedades y métodos públicos de la página maestra directamente a través de la Master propiedad sin conversiones.

Nota:

Si omite la @MasterType directiva, la sintaxis Page.Master y Master devuelve lo mismo: un objeto de tipo flexible a la página maestra de la página. Si incluye la @MasterType directiva. entonces Master devuelve una referencia fuertemente tipada a la página maestra especificada. Page.Master, sin embargo, todavía devuelve una referencia de tipo flexible. Para obtener un vistazo más exhaustivo a por qué este es el caso y cómo se Master construye la propiedad cuando se @MasterTypeincluye la directiva, consulte la entrada de blog de K. Scott Allen@MasterType en ASP.NET 2.0.

Actualizar la Página maestra después de agregar un nuevo producto

Ahora que sabemos cómo invocar las propiedades y métodos públicos de una página maestra desde una página de contenido, estamos listos para actualizar la AddProduct.aspx página para que la página maestra se actualice después de agregar un nuevo producto. Al principio del paso 4 creamos un controlador de eventos para el evento del ItemInserting control DetailsView, que se ejecuta inmediatamente después de agregar el nuevo producto a la base de datos. Agregue el código siguiente a ese controlador de eventos:

Protected Sub NewProduct_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles NewProduct.ItemInserted
 ' Cast the loosely-typed Page.Master property and then set the GridMessageText property 
 Dim myMasterPage As Site = CType(Page.Master, Site) 
 myMasterPage.GridMessageText = String.Format("{0} added to grid...", e.Values("ProductName"))
 ' Use the strongly-typed Master property 
 Master.RefreshRecentProductsGrid()
End Sub

El código anterior usa tanto la propiedad de Page.Master tipo flexible como la propiedad fuertemente tipada Master. Tenga en cuenta que la propiedad GridMessageText está establecida en "ProductName agregado a la cuadrícula..." Los valores del producto recién agregado son accesibles a través de la e.Values colección; como puede ver, se obtiene ProductName acceso al valor de recién agregado e.Values("ProductName").

En la figura 8 se muestra la AddProduct.aspx página inmediatamente después de un nuevo producto (Scott's Soda) se ha agregado a la base de datos. Tenga en cuenta que el nombre del producto recién agregado se indica en la etiqueta de la página maestra y que GridView se ha actualizado para incluir el producto y su precio.

The Master Page's Label and GridView Show the Just-Added Product

Figura 08: La etiqueta de la página maestra y GridView muestran el producto recién agregado (haga clic para ver la imagen de tamaño completo)

Resumen

Idealmente, una página maestra y sus páginas de contenido son completamente independientes entre sí y no requieren ningún nivel de interacción. Aunque las páginas maestras y las páginas de contenido deben diseñarse teniendo en cuenta ese objetivo, hay una serie de escenarios comunes en los que una página de contenido debe interactuar con su página maestra. Una de las razones más comunes se centra en actualizar una parte determinada de la presentación de la página maestra en función de alguna acción que transcurrió en la página de contenido.

La buena noticia es que es relativamente sencillo tener una página de contenido mediante programación interactuar con su página maestra. Empiece por crear propiedades o métodos públicos en la página maestra que encapsulan la funcionalidad que debe invocar una página de contenido. A continuación, en la página de contenido, acceda a las propiedades y métodos de la página maestra a través de la Page.Masterpropiedad de tipo flexible o use la @MasterType directiva para crear una referencia fuertemente tipada a la página maestra.

En el siguiente tutorial se examina cómo interactuar mediante programación con una de sus páginas de contenido.

¡Feliz programación!

Lecturas adicionales

Para obtener más información sobre los temas tratados en este tutorial, consulte los siguientes recursos:

Acerca del autor

Scott Mitchell, autor de varios libros de ASP/ASP.NET y fundador de 4GuysFromRolla.com, ha estado trabajando con tecnologías web de Microsoft desde 1998. Scott trabaja como consultor independiente, entrenador y escritor. Su último libro es Sams Teach Yourself ASP.NET 3.5 in 24 Hours. Se puede contactar con Scott en mitchell@4GuysFromRolla.com o a través de su blog en http://ScottOnWriting.NET.

Agradecimientos especiales a

Muchos revisores han evaluado esta serie de tutoriales. El revisor principal de este tutorial ha sido Zack Jones. ¿Le interesa revisar mis próximos artículos de MSDN? Si es así, escríbame a mitchell@4GuysFromRolla.com