2011-03-04 112 views
13

¿Cuál es la forma correcta de referenciar una imagen en ASP.NET para implementación en vivo en IIS?HTML img y ASP.NET Imagen y rutas relativas

las siguientes obras en dev y producción:

<asp:ImageButton ID="ibnEdit" runat="server" OnClick="ibnEdit_Click" ImageUrl="~/App_Themes/Default/images/one.png" Visible="false" ToolTip="Edit" /> 

El siguiente no funciona, ya sea en: (¿por qué no)

<img src="~/App_Themes/Default/images/two.gif" /> 

las siguientes obras en dev pero no en producción:

<img src="../App_Themes/Default/images/two.gif" /> 
+0

¿Estás seguro de que las imágenes se implementan en producción? –

+0

@son las imágenes en la misma ruta que el entorno dev. ?? – kobe

Respuesta

5

El ~ solo funcionará en un control de servidor como o. Esto le dice a ASP.Net que inserte la ruta de la aplicación. En algún momento eso es solo "/", pero si su aplicación no es el directorio raíz del sitio web, incluirá la ruta en la que se encuentra. La etiqueta img es solo html y no será alterada por ASP.Net, por lo que el navegador obtiene la ruta "~/App_Themes/Default/images/two.gif" y no sabe cómo leerlo.

No sé por qué el último ejemplo funciona en desarrollo pero no en producción. Puede tener algo que ver con tener la aplicación en el directorio raíz en dev pero en un subdirectorio en producción.

+1

+1, también, @mmmbop, para resolver ~/en una etiqueta HTML puede usar la clase UrlHelper (en lugar de cambiar a usar controles asp: image) '" /> ' –

22

Si desea utilizar una etiqueta normal img con la ruta ~, puede simplemente agregar runat="server" en la etiqueta como un atributo (como controles de servidor normales) y la ruta se resolverá. por ejemplo:

<img src="~/App_Themes/Default/images/two.gif" runat="server" /> 

Para su segunda parte, es la referencia ../ imagen que aparece en más de una página, por ejemplo, una página de control de usuario o maestro (etc.) de modo que es posible que la utilizará en diferentes niveles de carpetas ...

+0

Bien, ¿tiene algún efecto en general? rendimiento del sitio web? – Tanveer

+0

@Tanveer esencialmente no debería tener ningún efecto. El control pasaría por el ciclo de vida de control. Dicho esto, es probable que tenga que agregar un montón de imágenes para ver cualquier diferencia. – davidsleeps

4

puedo utilizar esta sintaxis para acceder a las imágenes de las páginas maestras

<img src="<%=ResolveUrl("~/Content/Images/error_img.jp")%>" width="350" style="padding-right: 15px; padding-top: 20px;"/> 
0

esto funcionó para mí

$ ("selector"). attr ('src', "content/themes /base/images/img.png ");

Lo importante es que no tiene "/" al comienzo de su nuevo src.

0
byte[] imageArray = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Upload_Image.png")); 

string base64ImageRepresentation = Convert.ToBase64String(imageArray);