Asp.net 分隔符 <% 替换为 <% 在 head 标记中?
也许这是一个愚蠢的问题,但我在 Visual Studio 2010 中遇到了这个问题:
在我的母版页中,我有这段代码:
<head runat="server">
<title>App Title</title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<link href="<%= App.RootPath %>Css/style.css" rel="stylesheet" type="text/css" />
</head>
出于某种奇怪的原因, <%
在运行时使用 <%
<%= App.RootPath %>
如果放在 head 标签之外的任何地方都可以正常工作。
有人从来没有经历过这个并解决过吗?
更新:
如果我在 head 标签中关闭 runat="server" ,它就可以工作。但我需要它。
编辑:
所有这些方法都有效,但问题是缺乏设计师支持?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
对你的技巧的解释:
要找到答案会生成编译异常。将
App.RootPath
更改为App.RootPaths..
,然后导航到源代码(它将显示在错误页面中)。如果编译器匹配类似的内容,那么它将生成代码来构建相应的
HtmlLink
实例。这就是为什么它将<%=
解析为文字字符串,然后对其进行编码。你的伎俩欺骗了编译器,这一点也不坏。
我相信它对元标记也有同样的作用,(
HtmlMeta
)The explanation for your trick:
To find the answer generate a compilation exception. Change
App.RootPath
toApp.RootPaths..
, then navigate to the source code (it will be shown in the error page). If the compiler matches something like<link href='' rel='' >
then it will generate the code to build a correspondingHtmlLink
instance. So this is why it parses<%=
as a literal string and after that it encodes it.Your trick cheats the compiler, which is not bad at all.
I believe it does the same thing for meta tags, (
HtmlMeta
)现在,我找到了这个解决方法;仍在寻找这种行为的原因。
For now, i've found this workaroud; still searching for the reason of this behaviour.
这也应该有效。
This should work too.
我通常使用
ResolveUrl
:I normally use
ResolveUrl
: