2012-07-16 20 views
38

Soy realmente nuevo en ASP.NET. Estaba revisando una aplicación web ASP.NET predeterminada. Viene por defecto con algunas páginas (Default.aspx, About.aspx, etc.).Comprender el atributo de servidor runat

Me di cuenta de que el archivo Site.master es el archivo donde creo el diseño principal de mis páginas. Pero también noté que la etiqueta head tiene un atributo runat="server".

Sé que esta etiqueta se usa en etiquetas <asp:XXX>, pero ¿por qué en una etiqueta <head> ???

Además, cuando elimino ese atributo, todos los estilos desaparecen de la página web. Así que aparentemente está haciendo algo. Simplemente no entiendo qué está haciendo exactamente ...

Entonces, ¿por qué está allí, en una etiqueta HTML ... ??? No veo ningún código de allí que se deben ejecutar en el servidor ...

<head runat="server"> 
    <title>Hallo</title> 
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> 

    <!-- This part is run on the server. So why does the head tag 
     also need a runat=server ?? --> 
    <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
+9

Comience a usar MVC, especialmente si acaba de comenzar. – vcsjones

+2

Ya hay varias preguntas discutiendo esto, como http://stackoverflow.com/q/1375725/422353, http://stackoverflow.com/q/304290/422353 – madth3

+1

@vcsjones ojalá pudiera, pero tengo que leer Libro MS 70-515 para mi certificado. Así que actualmente estoy atascado solo con ASP.NET :-( – Vivendi

Respuesta

20

El elemento principal contiene un atributo runat="server", que indica que se trata de un control de servidor (en lugar de HTML estático). Todas las páginas ASP.NET derivan de la clase Page, que se encuentra en el espacio de nombres System.Web.UI. Esta clase contiene una propiedad de encabezado que proporciona acceso a la región de la página. Usando la propiedad Encabezado, podemos establecer el título de una página ASP.NET o agregar marcas adicionales a la sección representada. Es posible, entonces, personalizar un elemento de la página de contenido escribiendo un fragmento de código en el controlador de eventos Page_Load de la página.

' Programmatically add a <meta> element to the Header 

Dim keywords As New HtmlMeta() 
keywords.Name = "keywords" 
keywords.Content = "master page,asp.net,tutorial" 
Page.Header.Controls.Add(keywords) 

Para más información vea Specifying Meta Tags in ASP.NET with VB.NET.

+0

Explicación muy confusa .... –

8

El atributo runat básicamente dice ASP.Net que necesita para analizar el elemento, sus atributos y su contenido como un control de servidor. Código de habilitación, en el servidor, que se ejecutará para configurar la respuesta.

Sin él, ningún control secundario contenido en la sección <head> no se analizará. Entonces, cualquier head er dinámico incluye manipulaciones de título o cualquier otro control de servidor no será interpretado.

5

La etiqueta runat = "server" en ASP.NET permite la capacidad de convertir/tratar la mayoría de los elementos HTML como un control del lado del servidor que puede manipular a través del código en el momento de la generación. Algunos controles tienen implementaciones explícitas, otros simplemente vuelven a una implementación de control genérico.

+0

Muy buena explicación, los otros son muy confusos –

27

Ha preguntado por qué los estilos ya no se aplican al eliminar runat="server" del elemento <head>.

Es simple: ejecutándose en el lado del servidor, el analizador sustituirá el ~/ de la declaración de la hoja de estilo <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> con la ruta raíz de la aplicación.

El ~ es ilegal en una URL. Por lo tanto, si no se reemplaza por el analizador, no se encontrará el archivo, por lo que la hoja de estilo no se aplicará.

Ah, por cierto, estableciendo el atributo runat="server" en el elemento <head> obligará a todos sus sub-elementos que se ejecutan en el servidor, por lo tanto por qué el elemento de <link> se ejecuta en el servidor.

Cuestiones relacionadas