【问题标题】:Inline code in head tag - ASP.NET头标记中的内联代码 - ASP.NET
【发布时间】:2011-11-12 11:50:41
【问题描述】:

是否可以在具有 runatserver 的母版页的 head 标记中执行类似的操作:

 <link rel="Stylesheet" type="text/css" href='<%=Config.ResourcesDomain %>/images/style.css' />

这是行不通的,因为它会生成这种 html:

<link rel="Stylesheet" type="text/css" href="&lt;%=Config.ResourcesDomain %>/images/style.css" />

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    输出被渲染成这样的原因:

    href="&lt;%=Config.ResourcesDomain %>/images/style.css"
    

    是因为 ASP.NET 将链接视为 HtmlLink 控件,并将 href 属性的内容呈现为文字。

    将 head 部分标记为服务器控件是一个奇怪的怪癖,其中某些元素被视为服务器控件(即使没有使用runat="server" 属性显式标记)。

    删除 href 属性周围的引号可以解决问题:

    href=<%= Config.ResourcesDomain %>/images/style.css
    

    这样做会停止将链接元素视为服务器控件,从而执行代码块并呈现正确的 URL。

    但是,上面写的href 值不带引号。使用以下内容,将引号添加到链接标签:

    href=<%= String.Format("'{0}'", Config.ResourcesDomain) %>/images/style.css
    

    希望这会有所帮助。

    编辑

    奇怪的是,如果您对 href 属性使用双引号,并在代码块中包含双引号,这也可以解决问题:

    href="<%= "" + Config.ResourcesDomain %>/images/style.css"
    

    但是,以上都不是特别优雅的解决方案,从后面的代码中设置 URL 可能是要走的路。

    【讨论】:

    • href="&lt;%# "" + MyString %&gt;" 为我工作。非常感谢。
    • 我快疯了!谢谢!!!我需要它来根据用户编写正确的 CSS 文件...
    • href="css/Login2.min.css?v" 对我有用
    【解决方案2】:

    我在这里找到的另一个解决方案:https://stackoverflow.com/a/5727996/368613 -- 只需将代码放入 PlaceHolder:

    <asp:PlaceHolder runat="server">
      ... your code with <%= %> tags ...
    </asp:PlaceHolder>
    

    【讨论】:

    • 这是我找到的唯一可行的解​​决方案。没有其他工作
    • 回应这是唯一对我有用的东西
    【解决方案3】:

    标记

    <head>
       <asp:Literal ID="litHead" runat="server" />
    </head>
    

    代码隐藏:

    在 page_load 上

    litHead.Text = "<link rel='Stylesheet'  type='text/css' href='" + Config.ResourcesDomain + "/images/style.css' />";
    

    更新: 然后这样做

    <head runat="server">
        <%
            Response.Write("<link rel='Stylesheet'  type='text/css' href='" + Config.ResourcesDomain + "/images/style.css' />");
        %>
        <title></title>
    </head>
    

    【讨论】:

    • 目标是内嵌在head标签中,后面没有代码
    • 见上文更新。这是某种你需要在没有代码的情况下完成的比赛吗?尽可能避免使用我们所谓的“Spaghetti Coding”或内联编码。这些编码风格应该被遗忘,因为那些在 asp 时代经常使用。 ASP.NET 将标记和代码完美地分开,以更好地实践编码标准。
    【解决方案4】:

    改成

     <link rel="Stylesheet"  type="text/css" href='<%Response.Write(Config.ResourcesDomain); %>/images/style.css' />
    

    它应该可以工作

    【讨论】:

    • 它仍然逃脱了“/images/style.css
    • 你写在aspx页面吗?
    • 你能放更多母版页的所有代码,但不是正文,只是正文的上半部分
    【解决方案5】:

    删除开头 head 标记上的 runat="server" 属性。 这样asp.net内联代码就可以正确渲染了。

    【讨论】:

      【解决方案6】:

      或者做这样的事情:

      <head>
          <style type="text/css">
              @import "<%= ResolveUrl("~/content/styles.css") %>";
              @import "<%= ResolveUrl("~/content/print.css") %>" print;
          </style>
      </head>
      

      【讨论】:

        【解决方案7】:

        显然,使用内联标记“”时需要数据绑定。

        <head id="Head">
            //Stuff with inline code
        </head>
        

        代码背后:

        protected void Page_Load {
            Head.DataBind();
        }
        

        问候

        【讨论】:

          猜你喜欢
          • 2012-03-15
          • 1970-01-01
          • 1970-01-01
          • 2012-08-08
          • 2016-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多