Master Page中的ResolveUrl问题

好的,

我知道这很奇怪但是当我把这段代码放在master.page中的时,这是它呈现的方式:

   

它没有看到asp.net需要照顾的东西。

这是原始代码:

 <link id="Link1" rel="shortcut icon" href='' type="image/x-icon" runat="server" /> 

基本上Asp.Net不会处理下面的代码并将其呈现为普通的html。

我该如何克服这个问题?

提前致谢…

编辑和解决

好的人,没有办法做到这一点。 我终于想通了,因为ResolveUrl或ResolveClientUrl仅适用于以下这些:

 @import ''; <script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript" 

它对于链接来说太字面了,所以你需要将链接元素放在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); 

这将以编程方式构建一个控件,然后将其添加到头部的控件集合中,该集合将在头标记的末尾呈现为您想要的内容。 问题在于它有更多的工作,如果你可以逃脱它,最好避免在后面的代码中使用控件集合进行修改。

这可能会使它变得比它需要的复杂一点。 您是否尝试过简单地在图标路径中使用~并设置

例如:

  ...   ...  

相关的答案 : Favicon没有显示