56

我真的是 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

4 回答 4

38

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

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

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

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

于 2013-05-24T06:59:19.893 回答
34

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)

有关详细信息,请参阅使用 VB.NET 在 ASP.NET 中指定元标记

于 2012-07-16T18:47:03.873 回答
20

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

于 2012-07-16T18:45:17.683 回答
11

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

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

于 2012-07-16T18:44:44.617 回答