【问题标题】:Why does the asp.net head control mangle link elements?为什么asp.net head control 会破坏链接元素?
【发布时间】:2010-08-10 21:25:00
【问题描述】:

假设我在标准 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>

奇怪的是,这会在字面上呈现 &lt;link&gt; 元素,并带有嵌入的代码括号,同时它将相同代码的输出插入到脚本标记中。换句话说,浏览器会看到:

<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",显然问题就会消失。

【问题讨论】:

    标签: asp.net controls


    【解决方案1】:

    嗯,你正在做的是(没有冒犯)有点傻,那就是 - 有一个 &lt;head&gt; server-side 元素,嵌套 &lt;link&gt; client-side具有服务器端 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>
    

    【讨论】:

    • 我同意这很奇怪,而且有不止一种合理的选择。我想知道在 head 等内置控件中插入标记是否有一些基本原则。
    • 所以我得到的印象是你不是在寻找解决方案,而是在寻找解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多