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

jek*_*com 37 c# asp.net

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

 <link rel="Stylesheet" type="text/css" href='<%=Config.ResourcesDomain %>/images/style.css' />
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它产生这种html:

<link rel="Stylesheet" type="text/css" href="&lt;%=Config.ResourcesDomain %>/images/style.css" />
Run Code Online (Sandbox Code Playgroud)

jda*_*ies 72

输出的原因如下:

href="&lt;%=Config.ResourcesDomain %>/images/style.css"
Run Code Online (Sandbox Code Playgroud)

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

这是将头部标记为服务器控件的奇怪怪癖,其中某些元素被视为服务器控件(即使没有使用runat="server"属性明确标记).

删除href属性周围的引用可解决此问题:

href=<%= Config.ResourcesDomain %>/images/style.css
Run Code Online (Sandbox Code Playgroud)

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

但是,上面写的href值没有引号.使用以下内容,将引号添加到链接标记:

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

希望这可以帮助.

编辑

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

href="<%= "" + Config.ResourcesDomain %>/images/style.css"
Run Code Online (Sandbox Code Playgroud)

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

  • 做`href ="<%#""+ MyString%>"`为我工作.非常感谢. (2认同)

imy*_*imy 9

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

<asp:PlaceHolder runat="server">
  ... your code with <%= %> tags ...
</asp:PlaceHolder>
Run Code Online (Sandbox Code Playgroud)