Pregunta

Bueno,

Sé que es raro pero cuando pongo este código entre <head runat="server"></head> en master.page, así es como se representa en:

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

No ve algo de lo que asp.net deba ocuparse.

Este es el código original:

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

Básicamente, Asp.Net no se ocupa del código siguiente y lo representa como un HTML normal.

¿Cómo puedo superar este problema?

Gracias de antemano...

Editar y resolver

Bien gente, no hay forma de hacer esto.Finalmente lo descubrí porque ResolveUrl o ResolveClientUrl solo funcionan para los siguientes:

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

Es demasiado literal para el enlace, por lo que debe colocar elementos del enlace en la etiqueta del cuerpo 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>
¿Fue útil?

Solución

Por lo tanto, la razón por la que ejecutó en su primera edición fue debido a que la etiqueta de enlace tuvo runat="server" Esto le dice a asp.net a tratarlo como un control de servidor, en lugar de un literal. Porque es un control de servidor, su etiqueta scriplet (<%= %>) no está haciendo nada, ya que es una propiedad de control del servidor que está tratando como texto literal.

Hay dos formas de manejarlo. En primer lugar es ClientScriptManager para registrar una nueva empresa guión. Esto hará que su etiqueta de enlace dentro del cuerpo, que es la forma en que Microsoft dice que debe hacerlo, pero estéticamente no es tan agradable. La otra opción es hacer algo como esto en su 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);

Esto construye un control mediante programación, a continuación, lo agrega a la colección de controles en la cabeza, lo que hará que como lo que quiere al final de la etiqueta de la cabeza. El problema con esto es que es un poco más de trabajo, y su mejor evitar monerías con las colecciones de control en el código detrás de nivel si puede salirse con la suya.

Otros consejos

Eso podría hacerlo un poco más complicado de lo necesario.¿Has intentado simplemente usar ~ en la ruta del icono y configurando <head runat="server">?

Por ejemplo:

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

Respuesta SO relacionada: Favicon no se muestra

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top