了解runat服务器属性

时间:2012-07-16 18:40:51

标签: asp.net

我是ASP.NET新手。我刚刚检查出一个默认的ASP.NET Web应用程序。它默认带有几页(Default.aspx,About.aspx等)。

我注意到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>

4 个答案:

答案 0 :(得分:32)

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

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

~在网址中是非法的。因此,如果解析器没有替换它,则不会找到该文件,因此不会应用样式表。

哦,顺便说一下,在runat="server"元素上设置<head>属性会强制所有子元素在服务器上运行,这就是为什么<link>元素在服务器

答案 1 :(得分:24)

head元素包含runat="server"属性,表示它是服务器控件(而不是静态HTML)。所有ASP.NET页面都派生自Page类,该类位于System.Web.UI命名空间中。此类包含一个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

答案 2 :(得分:12)

ASP.NET中的runat =“server”标记允许将大多数HTML元素转换/处理为服务器端控件,您可以在生成时通过代码进行操作。一些控件具有显式实现,其他控件只是恢复为通用控件实现。

答案 3 :(得分:9)

runat属性基本上告诉ASP.Net它需要解析元素,它的属性以及它作为服务器控件的内容。在服务器上启用要执行的代码以配置响应。

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