Problema ResolveUrl nella pagina master
-
24-09-2019 - |
Domanda
Va bene,
So che è strano, ma quando inserisco questo codice in mezzo <head runat="server"></head>
in master.page, ecco come viene visualizzato:
<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" />
Non vede qualcosa di cui asp.net deve occuparsi.
Questo è il codice originale:
<link id="Link1" rel="shortcut icon" href='<%=ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico") %>' type="image/x-icon" runat="server" />
Fondamentalmente Asp.Net non si prende cura del codice seguente e viene visualizzato come un normale codice HTML.
Come posso superare questo problema?
Grazie in anticipo...
Modifica e risolto
Ok gente, non c'è modo di farlo.Finalmente ho capito perché ResolveUrl o ResolveClientUrl funziona solo per questi seguenti:
@import '<%= ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") %>';
<script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript"</script>
è troppo letterale per il collegamento quindi è necessario inserire gli elementi del collegamento nel tag body come:
<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>
Soluzione
Quindi, il motivo è stato eseguito nel vostro primo numero è stato perché il tag link aveva runat="server"
Questo dice asp.net di trattarlo come un controllo server, piuttosto che un letterale. Perché il suo un controllo server, il tag scriptlet (<%= %>
) non è realmente facendo nulla, dal momento che la sua una proprietà controllo server è trattandolo come testo letterale.
Ci sono due modi di gestirlo. In primo luogo è quello di ClientScriptManager registrare una startup script. Questo metterà il tag di collegamento all'interno del corpo, che è il modo in cui Microsoft dice che si dovrebbe fare, ma esteticamente non è bella. L'altra opzione è quella di fare qualcosa di simile nel tuo 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);
Si costruisce così un controllo a livello di programmazione, quindi aggiunge alla collezione controlli sulla testa, che renderà come quello che si vuole, alla fine del tag head. Problema di questo è che la sua un po 'più di lavoro, e il suo meglio evitare monkeying con le collezioni di controllo a livello di codice dietro se si può farla franca.
Altri suggerimenti
Ciò potrebbe rendere le cose un po’ più complicate del necessario.Hai provato semplicemente a usare ~
nel percorso dell'icona e nell'impostazione <head runat="server">
?
Per esempio:
<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>
Risposta SO correlata: Favicon non visualizzata