为什么asp.net头控制mangle链接元素?

时间:2010-08-10 21:25:01

标签: asp.net controls

假设我在标准ASP.NET 2.0 Web表单中有以下标记:

<head runat="server">
    <title>My Snazzy Page</title>
    <link type="text/css" href="<%= PathUtilities.AssetPath %>/css/page.css" rel="stylesheet" />
    <script type="text/javascript" src="<%=PathUtilities.AssetPath %>/lib/jquery/1.4.2/jquery.min.js"></script>
</head>

奇怪的是,这会使用嵌入的代码括号逐字呈现<link>元素,同时将相同代码的输出插入到脚本标记中。换句话说,浏览器会看到:

<head><title>My Snazzy Page

</title><link type="text/css" href="&lt;%= PathUtilities.AssetPath %>/css/page.css" rel="stylesheet" />
<script type="text/javascript" src="/rmt/lib/jquery/1.4.2/jquery.min.js"></script>
</head>

如果我从head元素中删除runat="server",显然问题就会消失。

1 个答案:

答案 0 :(得分:1)

你所做的是(没有冒犯)有点傻,就是 - 拥有<head> 服务器端元素,嵌套<link> 服务器端 href属性

的客户端元素

无论如何,您正在从服务器代码动态呈现 href 值,因此更好的解决方案是从服务器动态呈现链接标记。

示例(页面代码隐藏)

// Define an HtmlLink control.
HtmlLink myHtmlLink = new HtmlLink();
myHtmlLink.Href = "/css/page.css";
myHtmlLink.Attributes.Add("rel", "stylesheet");
myHtmlLink.Attributes.Add("type", "text/css");

// Add the HtmlLink to the Head section of the page.
Page.Header.Controls.Add(myHtmlLink);

然后你的ASPX变得更整洁了:

<head runat="server">
    <title>My Snazzy Page</title>
    <!-- CSS/JS included dynamically -->
</head>