Quelle est la meilleure façon de remplacer les liens par des images à l'aide de Razor dans MVC3. Je fais simplement ceci pour le moment:
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a>
Y a-t-il un meilleur moyen?
~/Content
). Le chemin../../Content
pourrait ne pas être valide de différentes voies (par exemple/
,/Home
,/Home/Index
).Réponses:
Vous pouvez créer une méthode d'extension pour HtmlHelper afin de simplifier le code dans votre fichier CSHTML. Vous pouvez remplacer vos balises par une méthode comme celle-ci:
Voici un exemple de méthode d'extension pour le code ci-dessus:
la source
routeValues
àActionResult
, puis dans laurl.Action
fonction, changerrouteValues
enrouteValues.GetRouteValueDictionary()
/configuration/system.web/pages/namespaces
élément.alt
, j'accepte un objet pour recevoir des propriétés html en utilisant un objet anonyme puisvar attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
et enfinforeach (var attr in attributes){ imgBuilder.MergeAttribute(attr.Key, attr.Value.ToString());}
/Views
dossier de niveau supérieurVous pouvez utiliser
Url.Content
ce qui fonctionne pour tous les liens car il traduit le tilde~
en uri racine.la source
<a href="@Url.Action("Index","Home")"><img src="@Url.Content("~/Content/images/myimage.gif")" alt="Home" /></a>
S'appuyant sur la réponse de Lucas ci-dessus, il s'agit d'une surcharge qui prend un nom de contrôleur comme paramètre, similaire à ActionLink. Utilisez cette surcharge lorsque votre image est liée à une action dans un contrôleur différent.
la source
Eh bien, vous pouvez utiliser la solution @Lucas, mais il existe également un autre moyen.
Maintenant, ajoutez cette classe sur un fichier CSS ou dans votre page:
Avec cette classe, tout lien aura l'image souhaitée.
la source
ControllerName
de votre action. Comme ça:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Cela s'est avéré être un fil très utile.
Pour ceux qui sont allergiques aux accolades, voici la version VB.NET des réponses de Lucas et Crake:
la source
Cette méthode d'extension fonctionne également (à placer dans une classe statique publique):
la source
Pour ajouter à tout le travail impressionnant commencé par Luke, j'en publie un de plus qui prend une valeur de classe css et traite la classe et l'alt comme des paramètres optionnels (valide sous ASP.NET 3.5+). Cela permettra plus de fonctionnalités mais réduira le nombre de méthodes surchargées nécessaires.
la source
modification de la diapositive modifiée Helper
Classe CSS
Créez le lien, passez simplement le nom de la classe
la source
J'ai joint la réponse de Lucas et " ASP.NET MVC Helpers, fusion de deux objets htmlAttributes ensemble " et plus controllerName au code suivant:
// Exemple d'utilisation dans CSHTML
Et la classe d'extension pour le code ci-dessus:
la source
Ce serait très bien fonctionner
la source