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

本文关键字:代码 ASP NET 标签 头部 | 更新日期: 2023-09-27 18:14:10

是否有可能在母版页的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" />

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

输出呈现为这样的原因:

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

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

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

去掉href属性周围的引号可以解决这个问题:

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

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

但是,上面的代码将不带引号的href值写出来。使用以下命令,将为链接标签添加引号:

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

希望对你有帮助。

编辑

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

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

然而,以上都不是特别优雅的解决方案,从后面的代码设置URL可能是可行的方法。

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

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

标记

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

后台代码:

在employee

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>

改为

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

应该可以

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

或者这样做:

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

显然,当使用内联标签"<%# %>"时需要数据绑定。

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

背后的代码:

protected void Page_Load {
    Head.DataBind();
}