[英]ResolveUrl Problem in Master Page
好的,
我知道這很奇怪,但是當我將此代碼放在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>
因此,您遇到第一個問題的原因是因為鏈接標記具有runat="server"
這告訴asp.net將其視為服務器控件,而不是文字。 因為它是服務器控件,所以scriptlet標記( <%= %>
)實際上並沒有做任何事情,因為它是服務器控件屬性,因此將其視為文本。
有兩種處理方法。 首先是向ClientScriptManager注冊啟動腳本。 這會將您的鏈接標記放入體內,這是Microsoft所說的方式,但從美學上講並不是很好。 另一種選擇是在您的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標簽的結尾呈現為所需的內容。 問題在於這需要更多的工作,並且最好避免在后面的代碼中胡亂使用控件集合。
這可能會使它變得比需要的復雜。 您是否嘗試過在圖標路徑中僅使用~
並設置<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答案 :網站圖標未顯示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.