ResolveUrl Problem in Master Page

Okay,

I know it is weird but when I put this code between <head runat="server"></head> in master.page, this is how it renders into:

 <link id="ctl00_Link1" rel="shortcut icon" href="../%3C%25%20ResolveUrl(%22~/Resources/Pictures/Shared/Misc/favicon.ico%22);%20%25%3E" rel="nofollow noreferrer noopener" type="image/x-icon" />

It doesn’t see something asp.net needs to take care of.

This is the original code :

<link id="Link1" rel="shortcut icon" href='<%=ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico") %>' type="image/x-icon" runat="server" />

Basically Asp.Net doesn’t take care of the code below and renders as a normal html.

How can I get over this problem?

Thanks in advance…

Edit and Resolved

Okay people, there is no way for doing this. I’ve finally figured out because ResolveUrl or ResolveClientUrl is only working for these below :

@import '<%= ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") %>';
<script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript"</script>

it is too literal for link so you need to put link elements in body tag like :

<body>
    <link id="iconOne" rel="shortcut icon" type="image/x-icon" href="Resources/Pictures/Shared/Misc/favicon.ico" rel="nofollow noreferrer noopener"/>
    <link id="iconTwo" rel="icon" href='Resources/Pictures/Shared/Misc/favicon.ico' type="image/ico" />
</body>

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

So, the reason you ran into your first issue was because the link tag had runat="server" This tells asp.net to treat it as a server control, rather then a literal. Because its a server control, your scriptlet tag (<%= %>) isn’t really doing anything, since its a server control property it is treating it as literal text.

There are two ways to handle it. First is to ClientScriptManager to register a startup script. This will put your link tag inside the body, which is the way microsoft says you should do it, but aesthetically isn’t that nice. The other option is to do something like this in your 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);

This builds out a control programatically, then adds it to the controls collection on the head, which will render as what you want at the end of the head tag. Problem with this is that its a bit more work, and its better to avoid monkeying with control collections at the code behind level if you can get away with it.

Method 2

That might be making it a little more complicated than it needs to be. Have you tried simply using ~ in icon path, and setting <head runat="server">?

For example:

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

Related SO answer: Favicon Not Showing


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x