是否可以在主页面的head标签中执行类似的操作,该主页面具有runatserver:
<link rel="Stylesheet" type="text/css" href='<%=Config.ResourcesDomain %>/images/style.css' />
这不起作用,因为它产生了这种html:
<link rel="Stylesheet" type="text/css" href="<%=Config.ResourcesDomain %>/images/style.css" />
答案 0 :(得分:72)
输出的原因如下:
href="<%=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();
}
此致