Resolveurl Problema na Página Master
-
24-09-2019 - |
Pergunta
Ok,
Eu sei que é estranho, mas quando eu coloquei esse código entre <head runat="server"></head>
Na Master.page, é assim que ele se torna:
<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" />
Não vê algo que asp.net precisa cuidar.
Este é o código original:
<link id="Link1" rel="shortcut icon" href='<%=ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico") %>' type="image/x-icon" runat="server" />
Basicamente, o ASP.NET não cuida do código abaixo e torna o HTML normal.
Como posso superar esse problema?
Desde já, obrigado...
Editar e resolver
Ok, pessoal, não há como fazer isso. Finalmente descobri porque o Resolveurl ou o Resolveclienturl está funcionando apenas para estes abaixo:
@import '<%= ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") %>';
<script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript"</script>
É muito literal para link, então você precisa colocar elementos de link na etiqueta corporal como:
<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>
Solução
Então, a razão pela qual você encontrou sua primeira edição foi porque a etiqueta do link teve runat="server"
Isso diz ao ASP.NET para tratá -lo como um controle de servidor, em vez de literal. Porque é um controle de servidor, sua tag scriptlet (<%= %>
) não está realmente fazendo nada, pois é uma propriedade de controle de servidor, está tratando -a como texto literal.
Existem duas maneiras de lidar com isso. Primeiro é CustomerscriptManager Para registrar um script de inicialização. Isso colocará sua tag de link dentro do corpo, que é a maneira como a Microsoft diz que você deve fazê -lo, mas esteticamente não é tão bom. A outra opção é fazer algo assim em seu 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);
Isso cria um controle programaticamente e o adiciona à coleção de controles na cabeça, que renderizará como o que você deseja no final da etiqueta da cabeça. O problema disso é que é um pouco mais trabalhoso e é melhor evitar macacos com coleções de controle no código do nível, se você puder se safar.
Outras dicas
Isso pode estar tornando -o um pouco mais complicado do que precisa. Você já tentou simplesmente usar ~
no caminho do ícone e configuração <head runat="server">
?
Por exemplo:
<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>
Related So Responder: Favicon não está aparecendo