Существует ли ASP.NET MVC HtmlHelper для ссылок на изображения? - PullRequest
14 голосов
/ 24 марта 2009

Html.RouteLink () HtmlHelper отлично работает для текстовых ссылок. Но как лучше связать изображение?

Ответы [ 8 ]

34 голосов
/ 24 марта 2009
<a href="<%=Url.RouteUrl(...)%>"><img src="..." alt="..." /></a>
24 голосов
/ 04 августа 2009

Вот мое, основная функция делает некоторые перегрузки

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();
}
15 голосов
/ 25 января 2010

Это обновленная версия от MiniScalope , ответ выше. Я использую VS2010 и ASP.Net MVC 2 Preview

        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();

    }
9 голосов
/ 24 марта 2009
<%= Html.ActionLink(Html.Image(imageUrl, imageAlt), actionName, controllerName) %>

может работать, расширение изображения из сборки фьючерсов. Или сделайте свое собственное расширение.

7 голосов
/ 24 марта 2009

Создайте свое собственное вспомогательное расширение.

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);
}
5 голосов
/ 22 октября 2009

Мне не хватает ТАКОГО чванства, чтобы добавить комментарий, но это комментарий к Комментарий MiniScalope выше :

UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;

Я бы предложил сделать этот метод расширения HtmlHelper сам по себе (и упростить его) для повторного использования:

private static UrlHelper Url(this HtmlHelper helper)
{ 
  return new UrlHelper(helper.ViewContext.RequestContext);
}
3 голосов
/ 24 марта 2009
<%= Html.RouteLink("PLACEHOLDER", ...).Replace("PLACEHOLDER", "<img src=""..."" alt=""..."" />")%>
2 голосов
/ 25 июня 2013

этот код был протестирован на 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());

    }
...