我是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>
答案 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
包含,标题操作或任何其他服务器控件都不会被解释。