好的,
我知道这很奇怪,但是当我把这段代码放在 <head runat="server"></head>
之间时在 master.page 中,它是这样呈现的:
<link id="ctl00_Link1" rel="shortcut icon" href="../%3C%25%20ResolveUrl(%22~/Resources/Pictures/Shared/Misc/favicon.ico%22);%20%25%3E" type="image/x-icon" />
它看不到 asp.net 需要处理的事情。
这是原始代码:
<link id="Link1" rel="shortcut icon" href='<%=ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico") %>' type="image/x-icon" runat="server" />
基本上,Asp.Net 不会处理下面的代码并呈现为普通的 html。
我怎样才能克服这个问题?
提前致谢...
编辑并解决
好吧,没有办法做到这一点。我终于弄清楚了,因为 ResolveUrl 或 ResolveClientUrl 仅适用于以下这些:
@import '<%= ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") %>';
<script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript"</script>
它对于链接来说过于直白,所以你需要将链接元素放在 body 标签中,例如:
<body>
<link id="iconOne" rel="shortcut icon" type="image/x-icon" href="Resources/Pictures/Shared/Misc/favicon.ico"/>
<link id="iconTwo" rel="icon" href='Resources/Pictures/Shared/Misc/favicon.ico' type="image/ico" />
</body>
最佳答案
所以,您遇到第一个问题的原因是链接标签有 runat="server"
这告诉 asp.net 将其视为服务器控件,而不是文字。因为它是一个服务器控件,所以您的 scriptlet 标记 ( <%= %>
) 实际上并没有做任何事情,因为它是一个服务器控件属性,所以将其视为文字文本。
有两种处理方式。首先是ClientScriptManager注册启动脚本。这会将您的链接标记放入正文中,这是微软所说的您应该这样做的方式,但在美学上并不是那么好。另一种选择是在您的 Page_Load 中执行类似的操作
var link = new HtmlGenericControl("link");
link.Attributes.Add("rel", "shortcut icon");
link.Attributes.Add("src", ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico"));
link.Attributes.Add("type", "image/x-icon");
Header.Controls.Add(link);
这将以编程方式构建一个控件,然后将其添加到头部的控件集合中,它将在 head 标记的末尾呈现为您想要的内容。这样做的问题是它需要做更多的工作,如果可以的话,最好避免在代码隐藏级别使用控件集合。
关于c# - 母版页中的 ResolveUrl 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2588740/