2012-07-16 16 views
38

Sono davvero nuovo su ASP.NET. Stavo controllando un'applicazione Web ASP.NET predefinita. Viene fornito di default con poche pagine (Default.aspx, About.aspx ecc.).Informazioni sull'attributo del server runat

ho notato che il file Site.master è il file in cui creo il layout principale per le mie pagine. Ma ho anche notato che il tag head ha un attributo runat="server".

So che questo tag è utilizzato nei tag <asp:XXX>, ma perché in un tag <head> ???

Inoltre, quando rimuovo quell'attributo, tutti gli stili sono scomparsi dalla pagina web. Quindi sembra che stia facendo qualcosa. Io proprio non capisco quale sia la sua esattamente facendo ...

Allora perché è lì, su un tag HTML ... ??? Non vedo alcun codice in là che deve essere eseguito sul server ...

<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

Iniziare a utilizzare MVC, soprattutto se si sta appena iniziando. – vcsjones

+2

Ci sono già diverse domande per discuterne, come http://stackoverflow.com/q/1375725/422353, http://stackoverflow.com/q/304290/422353 – madth3

+1

@vcsjones vorrei poterlo fare, ma devo leggere MS 70-515 libro per il mio certificato. Quindi attualmente sono bloccato con ASP.NET :-( – Vivendi

risposta

20

L'elemento testa contiene un attributo runat="server", che indica che si tratta di un controllo server (anziché HTML statico). Tutte le pagine ASP.NET derivano dalla classe Page, che si trova nello spazio dei nomi System.Web.UI. Questa classe contiene una proprietà Header che fornisce l'accesso alla regione della pagina. Usando la proprietà Header possiamo impostare il titolo di una pagina ASP.NET o aggiungere ulteriori markup alla sezione renderizzata. È possibile, quindi, personalizzare l'elemento di una pagina di contenuto scrivendo un po 'di codice nel gestore di eventi Page_Load della pagina.

' 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) 

Per ulteriori informazioni, vedere Specifying Meta Tags in ASP.NET with VB.NET.

+0

Spiegazione molto confusa .... –

8

L'attributo runat fondamentalmente dice ASP.Net che ha bisogno di analizzare l'elemento, i suoi attributi ed è contenuto come un controllo del server. Abilitazione del codice, sul server, da eseguire per configurare la risposta.

Senza di essa, eventuali controlli figlio contenuti all'interno della sezione <head> non andranno analizzati. Pertanto, qualsiasi dinamica head include, manipolazioni del titolo o altri controlli server non saranno interpretati.

5

Il tag runat = "server" in ASP.NET consente la possibilità di convertire/trattare la maggior parte qualsiasi elemento HTML come un controllo lato server che è possibile manipolare tramite codice in fase di generazione. Alcuni controlli hanno implementazioni esplicite, altri semplicemente convertono in un'implementazione di controllo generica.

+0

Ottima spiegazione, le altre sono molto confuse –

27

Hai chiesto perché gli stili non vengono più applicati quando si rimuove lo runat="server" dall'elemento <head>.

È semplice: eseguendo sul lato server, il parser sostituirà il ~/ dalla dichiarazione del foglio di stile <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> con il percorso root dell'applicazione.

Il ~ è illegale in un URL. Pertanto, se questo non viene sostituito dal parser, il file non verrà trovato, quindi il foglio di stile non verrà applicato.

Oh, a proposito, impostando l'attributo runat="server" sull'elemento <head> costringerà tutti i suoi elementi parziali da eseguire sul server, così perché l'elemento <link> viene eseguito sul server.

Problemi correlati