¿Cuál es la mejor manera de reemplazar enlaces con imágenes usando Razor en MVC3? Simplemente estoy haciendo esto en este momento:
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a>
¿Existe una forma mejor?
image
asp.net-mvc-3
action
razor
davy
fuente
fuente
~/Content
). El camino../../Content
podría no ser válido a partir de diferentes rutas (por ejemplo/
,/Home
,/Home/Index
).Respuestas:
Puede crear un método de extensión para HtmlHelper para simplificar el código en su archivo CSHTML. Puede reemplazar sus etiquetas con un método como este:
Aquí hay un método de extensión de muestra para el código anterior:
fuente
routeValues
aActionResult
y luego en elurl.Action
cambio de funciónrouteValues
derouteValues.GetRouteValueDictionary()
/configuration/system.web/pages/namespaces
elemento.alt
, acepto un objeto para recibir propiedades html usando un objeto anónimo entoncesvar attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
y finalmenteforeach (var attr in attributes){ imgBuilder.MergeAttribute(attr.Key, attr.Value.ToString());}
/Views
carpeta de nivel superiorPuede usar el
Url.Content
que funciona para todos los enlaces, ya que traduce la tilde~
al uri raíz.fuente
<a href="@Url.Action("Index","Home")"><img src="@Url.Content("~/Content/images/myimage.gif")" alt="Home" /></a>
Sobre la base de la respuesta de Lucas anterior, esta es una sobrecarga que toma un nombre de controlador como parámetro, similar a ActionLink. Utilice esta sobrecarga cuando su imagen se vincule a una acción en un controlador diferente.
fuente
Bueno, podrías usar la solución @Lucas, pero también hay otra forma.
Ahora, agregue esta clase en un archivo CSS o en su página:
Con esa clase, cualquier enlace tendrá tu imagen deseada.
fuente
ControllerName
de tu acción. Así:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Este resultó ser un hilo muy útil.
Para aquellos que son alérgicos a las llaves, aquí está la versión VB.NET de las respuestas de Lucas y Crake:
fuente
Este método de extensión también funciona (para colocarlo en una clase estática pública):
fuente
Para agregar a todo el trabajo impresionante iniciado por Luke, estoy publicando uno más que toma un valor de clase css y trata a class y alt como parámetros opcionales (válido bajo ASP.NET 3.5+). Esto permitirá una mayor funcionalidad pero reducirá la cantidad de métodos sobrecargados necesarios.
fuente
modificación de diapositiva cambiado Ayudante
Clase CSS
Crea el enlace solo pasa el nombre de la clase
fuente
Me uní a la respuesta de Lucas y " ASP.NET MVC Helpers, Fusionando dos objetos htmlAttributes juntos " y más controllerName al siguiente código:
// Uso de muestra en CSHTML
Y la clase de extensión para el código anterior:
fuente
Esto funcionaría muy bien
fuente