Master Page中的ResolveUrl问题

时间:2010-04-06 22:15:21

标签: c# asp.net master-pages resolveurl

好,

我知道这很奇怪,但当我在master.page中的<head runat="server"></head>之间放置此代码时,这就是它呈现的方式:

 <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>

2 个答案:

答案 0 :(得分:4)

因此,您遇到第一个问题的原因是因为链接标记有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标记的末尾呈现为您想要的内容。问题在于它的工作量更多,如果你可以躲开它,最好避免使用代码隐藏的代码来控制集合。

答案 1 :(得分:3)

这可能会使它变得比它需要的复杂一点。您是否尝试过在图标路径中使用~并设置<head runat="server">

例如:

<head runat="server">
    ...
    <link rel="icon" href="~/Resources/Pictures/Shared/Misc/favicon.ico" 
        type="image/x-icon" />
    <link rel="shortcut icon" href="~/Resources/Pictures/Shared/Misc/favicon.ico"
        type="image/x-icon" />
    ...
</head>

相关SO回答Favicon Not Showing