是否有用于图像链接的ASP.NET MVC HtmlHelper?

Zac*_*son 14 asp.net-mvc routes html-helper

Html.RouteLink()HtmlHelper非常适合文本链接.但是链接图像的最佳方式是什么?

Zac*_*son 34

<a href="<%=Url.RouteUrl(...)%>"><img src="..." alt="..." /></a>
Run Code Online (Sandbox Code Playgroud)


Min*_*ope 24

这是我的,它的核心功能是一些超载

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();
}
Run Code Online (Sandbox Code Playgroud)

  • 只是要指出htmlHelper.Image()不再是MVC4. (4认同)

Gab*_*eon 15

这是我从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();

    }
Run Code Online (Sandbox Code Playgroud)


And*_*asN 9

<%= Html.ActionLink(Html.Image(imageUrl, imageAlt), actionName, controllerName) %>
Run Code Online (Sandbox Code Playgroud)

可以工作,图像扩展来自期货装配.或者自己进行扩展.


Cha*_*ran 7

创建自己的帮助程序扩展.

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);
}
Run Code Online (Sandbox Code Playgroud)


Osk*_*ard 5

我没有足够的SO招摇添加评论,但这是对MiniScalope上述评论 的评论:

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

我建议将其作为一个HtmlHelper扩展方法(并简化它),以便重用:

private static UrlHelper Url(this HtmlHelper helper)
{ 
  return new UrlHelper(helper.ViewContext.RequestContext);
}
Run Code Online (Sandbox Code Playgroud)