2011-03-16 12 views
11

Estoy almacenando la ubicación de las imágenes en mi base de datos en una aplicación MVC ... pero solo estoy almacenando parte de la ubicación. Por ejemplo:Uso de Url.Content con URL semi-relativa

/headers/image1.jpg 
/headers/image2.jpg 

Las imágenes se almacenan realmente en la siguiente carpeta:

~/content/images/headers/image1.jpg 
~/content/images/headers/image1.jpg 

En mi opinión, quiero hacer algo como esto:

<img src="@Url.Content("~/content/images") + Model.ImageUrl" /> 

¿Cómo puedo hacer ¿esta?

+1

@Dismissile, sugiero almacenar la ruta completa en la base de datos, si alguna vez necesita cambiar el nombre de la carpeta, todo está en un solo lugar, en lugar de espaguetizar a través de su aplicación. –

+0

@Nick - buen punto. Estaba pensando "¿y si decido cambiar la ubicación de todas estas imágenes, entonces tendría que actualizar todas las filas en la base de datos? Si lo estoy usando todo en las vistas ... es" Probablemente sea menos trabajo actualizar las filas – Dismissile

+0

@Nick: eso es discutible. Personalmente prefiero cambiar un lugar en el código cuando necesito cambiar la carpeta base que crear un script para cambiar todas las cadenas apropiadas en mi base de datos. Sin embargo, al menos querría utilizar una constante en lugar de dispersar "~/content/images" alrededor de mis puntos de vista. – StriplingWarrior

Respuesta

36

Just do it!

<img src="@Url.Content("~/content/images" + Model.ImageUrl)" /> 

ACTUALIZACIÓN:

A partir de ASP.NET MVC 4 es válida para utilizar las direcciones URL tilde directamente en HTML como el Razor Ver motor analizará las direcciones URL. De esta manera:

<img src="~/content/images/@Model.ImageUrl" /> 
+0

¡Bah! Debería haberlo intentado antes de asumir que no funcionaría. Traté de hacer algo como: @ Url.Content ("~/content/images/@Model.ImageUrl") antes de escribir mi pregunta, y luego modifiqué mi pregunta para saber cómo iba a funcionar :) – Dismissile

+2

It toma un poco de tiempo para entrar en Razor, pero una vez que estás allí, no hay vuelta atrás. –

+0

¿qué biblioteca deberíamos agregar para usar Url.Content @using what ??? –

0

Puede escribir método de extensión que se combinan con el camino de su ImageUrl configurado para directorio de contenido.

<img src="@Model.ImageUrl.ToRelative()" alt="@Model.ImageAlt" /> 

PS
recordar acerca de etiqueta alt. ;)

Cuestiones relacionadas