头标记中的内联代码 - ASP.NET

时间:2011-11-12 11:50:41

标签: c# asp.net

是否可以在主页面的head标签中执行类似的操作,该主页面具有runatserver:

 <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" />

7 个答案:

答案 0 :(得分:72)

输出的原因如下:

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

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

将头部标记为服务器控件这是一个奇怪的怪癖,其中某些元素被视为服务器控件(即使没有使用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可能是要走的路。

答案 1 :(得分:9)

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

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

答案 2 :(得分:4)

加价

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

代码隐藏:

on 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>

答案 3 :(得分:1)

将其更改为

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

应该有效

答案 4 :(得分:1)

删除开头标记上的runat =“server”属性。 这样就可以正确呈现asp.net内联代码。

答案 5 :(得分:0)

或者做这样的事情:

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

答案 6 :(得分:0)

使用内联标记“&lt;%#%&gt;”时,显然需要数据绑定。

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

代码背后:

protected void Page_Load {
    Head.DataBind();
}

此致