2012-07-16 99 views
38

我对ASP.NET很陌生。我只是检查一个默认的ASP.NET Web应用程序。它默认带有几页(Default.aspx,About.aspx等)。了解runat服务器属性

我注意到Site.master文件是我为我的页面创建主布局的文件。 但我也注意到head标签有一个runat="server"属性。

我知道这个标签用于<asp:XXX>标签,但为什么在<head>标签???

此外,当我删除该属性,然后所有样式都从网页中消失。所以显然它正在做一些事情。我只是不明白它到底在做什么......

那么为什么它在那里,在一个HTML标签...... ???我看不出在那里的任何代码应在服务器上运行...

<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

开始使用MVC,特别是如果你刚刚开始。 – vcsjones 2012-07-16 18:45:31

+2

已经有几个问题在讨论这个问题,像http://stackoverflow.com/q/1375725/422353,http://stackoverflow.com/q/304290/422353 – madth3 2012-07-16 18:47:20

+1

@vcsjones我希望我可以,但我必须阅读MS 70-515书为我的证书。所以目前我只是坚持使用ASP.NET :-( – Vivendi 2012-07-16 19:04:44

回答

20

head元素包含runat="server"属性,这表示它是服务器控件(而不是静态HTML)。所有ASP.NET页面都来自位于System.Web.UI命名空间中的Page类。这个类包含一个Header属性,提供对页面区域的访问。使用Header属性,我们可以设置一个ASP.NET页面的标题或者向渲染部分添加额外的标记。那么可以通过在页面的Page_Load事件处理程序中写入一些代码来定制内容页面的元素。

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

欲了解更多信息,请参阅Specifying Meta Tags in ASP.NET with VB.NET

+0

非常混乱的解释.... – 2018-03-09 16:01:52

8

runat属性主要是告诉ASP.Net它需要解析的元素,它的属性和它的内容一个服务器控件。在服务器上启用代码以执行配置响应。

没有它,<head>部分中包含的任何子控件都不会被解析。所以,任何动态的head包括,标题操作或任何其他服务器控件将不会被解释。

5

ASP.NET中的runat =“server”标签允许将大多数任何HTML元素转换/处理为服务器端控件,您可以通过代码在生成时操作该控件。一些控件具有明确的实现,其他控件则简单地转换为通用控件实现。

+0

很好的解释,其他人很混乱 – 2018-03-09 16:03:20

27

您问为什么在从<head>元素中删除runat="server"时不再应用这些样式。

很简单:通过在服务器端运行,解析器将用样式表声明<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />替换应用程序根路径中的~/

~在URL中是非法的。因此,如果这不被解析器所取代,该文件将不会被找到,因此样式表将不会被应用。

哦,顺便说一句,设置runat="server"属性<head>元素将迫使所有的子元素在服务器上运行,因此为什么<link>元素在服务器上运行。