Le Html.RouteLink() HtmlHelper fonctionne très bien pour les liens texte. Mais quelle est la meilleure façon de lier une image?Existe-t-il un HtmlHelper ASP.NET MVC pour les liens d'image?
Répondre
ici le mien, sa fonction de base faire quelques surcharges
public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes)
{
UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
string imgtag = htmlHelper.Image(imgSrc, alt,imgHtmlAttributes);
string url = urlHelper.Action(actionName, controllerName, routeValues);
TagBuilder imglink = new TagBuilder("a");
imglink.MergeAttribute("href", url);
imglink.InnerHtml =imgtag;
imglink.MergeAttributes(new RouteValueDictionary(htmlAttributes), true);
return imglink.ToString();
}
<a href="<%=Url.RouteUrl(...)%>"><img src="..." alt="..." /></a>
+1 comme cela est la méthode la plus rapide je l'ai utilisé sur tant de réponse ici. Je viens de spécifier l'action et le contrôleur dans cette méthode et cela a bien fonctionné. – nccsbim071
Créez votre propre extension d'assistance.
public static string Image(this HtmlHelper helper, string src, string alt)
{
TagBuilder tb = new TagBuilder("img");
tb.Attributes.Add("src", helper.Encode(src));
tb.Attributes.Add("alt", helper.Encode(alt));
return tb.ToString(TagRenderMode.SelfClosing);
}
Cela ne crée cependant pas de lien d'action image. N'est-ce pas ce que Zack demande? –
même si cela ne répond pas directement à la question que j'aime vraiment cette méthode pour créer une extension d'aide d'étiquette d'image. Merci :) –
<%= Html.ActionLink(Html.Image(imageUrl, imageAlt), actionName, controllerName) %>
pourrait fonctionner, l'extension de l'image est de l'ensemble des contrats à terme. Ou faites votre propre extension.
Pas de tag-soupe. Agréable. –
Ne semble pas fonctionner. La méthode Html.ActionLink() apparaît pour coder html le premier argument de sorte que tous les crochets d'angle etc sont échappés. – macon
<%= Html.RouteLink("PLACEHOLDER", ...).Replace("PLACEHOLDER", "<img src=""..."" alt=""..."" />")%>
Celui-ci nécessite un tas de manipulation de chaîne laide. –
Je n'ai pas assez SO fanfaronnades pour ajouter un commentaire, mais ceci est un commentaire sur MiniScalope's comment above:
UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
Je voudrais su ggest ce qui en fait une méthode d'extension HtmlHelper en elle-même (et simplifier), pour la réutilisation:
private static UrlHelper Url(this HtmlHelper helper)
{
return new UrlHelper(helper.ViewContext.RequestContext);
}
Ceci est une version mise à jour que j'ai de MiniScalope réponse ci-dessus. J'utilise VS2010 et ASP.Net MVC 2 Aperçu
public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes)
{
UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
TagBuilder imgTag = new TagBuilder("img");
imgTag.MergeAttribute("src", imgSrc);
imgTag.MergeAttributes((IDictionary<string, string>) imgHtmlAttributes,true);
string url = urlHelper.Action(actionName, controllerName, routeValues);
TagBuilder imglink = new TagBuilder("a");
imglink.MergeAttribute("href", url);
imglink.InnerHtml = imgTag.ToString();
imglink.MergeAttributes((IDictionary<string, string>)htmlAttributes, true);
return imglink.ToString();
}
ce code a été testé sur mvc4 ...
public static MvcHtmlString ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes)
{
UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;
var imgTag = new TagBuilder("img");
imgTag.MergeAttribute("src", imgSrc);
imgTag.MergeAttributes((IDictionary<string, string>)imgHtmlAttributes, true);
string url = urlHelper.Action(actionName, controllerName, routeValues);
var imglink = new TagBuilder("a");
imglink.MergeAttribute("href", url);
imglink.InnerHtml = imgTag.ToString();
imglink.MergeAttributes((IDictionary<string, string>)htmlAttributes, true);
return MvcHtmlString.Create(imglink.ToString());
}
Est-ce que ce ne devrait pas être HtmlString au lieu de chaîne? avec return new HtmlString (imglink.ToString()); ? – Stacker
Juste pour signaler que htmlHelper.Image() n'est plus dans MVC4. –
ne peut pas déclarer htmlHelper.Image() – kasim