2010-04-06 4 views
2

D'accord,ResolveUrl problème en Master page

Je sais qu'il est bizarre, mais quand je mets ce code entre <head runat="server"></head> dans master.page, voici comment cela rend dans:

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

Il ne voir quelque chose asp.net doit prendre soin de.

Voici le code d'origine:

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

Fondamentalement Asp.Net ne prend pas en charge le code ci-dessous et rend comme html normal.

Comment puis-je surmonter ce problème?

Merci à l'avance ...

Modifier et Résolue

personnes Bon, il n'y a aucun moyen de le faire. Je l'ai finalement compris parce ResolveUrl ou ResolveClientUrl ne fonctionne que pour ces ci-dessous:

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

il est trop littérale pour le lien si vous avez besoin de mettre des éléments de lien dans la balise corps comme:

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

Répondre

4

Alors , la raison pour laquelle vous avez rencontré votre premier problème était que le tag de lien avait runat="server" Cela indique à asp.net de le traiter comme un contrôle serveur, plutôt que comme un littéral. Parce que c'est un contrôle serveur, votre balise scriptlet (<%= %>) ne fait vraiment rien, puisque c'est une propriété de contrôle serveur qu'il traite comme du texte littéral.

Il y a deux façons de le gérer. Le premier est à ClientScriptManager pour enregistrer un script de démarrage. Cela mettra votre tag de lien dans le corps, ce qui est la façon dont Microsoft dit que vous devriez le faire, mais esthétiquement n'est pas très agréable. L'autre option est de faire quelque chose comme ça dans votre 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); 

Cela construit un contrôle programatically, puis ajoute à la collection de contrôles sur la tête, ce qui rendra comme ce que vous voulez à la fin de la tête marque. Le problème avec ceci est que c'est un peu plus de travail, et c'est mieux d'éviter de faire du monkeys avec des collections de contrôle au niveau du code derrière si vous pouvez vous en sortir.

+0

J'ai essayé le second déjà, mais il n'a pas changé quoi que ce soit. Le rendu de contrôle l'a rendu comme il le voulait finalement. Et oui, je viens de mettre l'élément de lien sous la balise '' et cela a fonctionné. – Tarik

3

Cela pourrait rendre le processus un peu plus compliqué qu'il ne devrait l'être. Avez-vous essayé simplement d'utiliser ~ dans le chemin de l'icône et de régler <head runat="server">?

Par exemple:

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

connexes SO répondre: Favicon Not Showing