How can I do something similar to Html.ActionLink() except place the generated link around an Image instead of just spitting out the link?
6 Answers
Razor (View Engine):
<a href="@Url.Action("ActionName", "ControllerName")">
<img src="@Url.Content("~/Content/img/imgname.jpg")" />
</a>
ASPX (View Engine):
<a href="<%= Url.Action("ActionName", "ControllerName") %>">
<img src="<%= Url.Content("~/Content/img/imgname.jpg") %>" />
</a>
Obviously, if you do this more than once, write a helper for it. And fill in the other attributes of img/a. But this should give you the general idea.

- 53,448
- 46
- 161
- 251

- 125,891
- 12
- 252
- 273
Try something like this:
public static string ActionLinkWithImage(this HtmlHelper html, string imgSrc, string actionName)
{
var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
string imgUrl = urlHelper.Content(imgSrc);
TagBuilder imgTagBuilder = new TagBuilder("img");
imgTagBuilder.MergeAttribute("src", imgUrl);
string img = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
string url = UrlHelper.Action(actionName);
TagBuilder tagBuilder = new TagBuilder("a") {
InnerHtml = img
};
tagBuilder.MergeAttribute("href", url);
return tagBuilder.ToString(TagRenderMode.Normal);
}
Hope this helps

- 28,023
- 6
- 71
- 62
-
6I suggest changing `TagRenderMode.Normal` to `TagRenderMode.SelfClosing` for the img; otherwise it renders as `
` instead of ` – Michael Haren Feb 05 '10 at 18:45` -
1Action is not static method of UrlHelper class so it should be called from an urlHelper object. – a.farkas2508 Jun 25 '14 at 12:46
The first answer given by @Craig Stuntz is absolutely perfect but my concern is about if what will you do if you have Ajax.ActionLink
instead of Html.ActionLink
. Here I will explain easy solutions for both methods. You can do as the following for Html.ActonLink
:
@Html.Raw(@Html.ActionLink("[replacetext]", "Index", "Home").ToHtmlString().Replace("[replacetext]", "<img src=\"/Contents/img/logo.png\" ... />"))
same concept can be applied for Ajax.ActionLink
@Html.Raw(@Ajax.ActionLink("[replacetext]", "Index", "Home", new AjaxOptions { UpdateTargetId="dvTest"}).ToHtmlString().Replace("[replacetext]", "<img src=\"/Contents/img/logo.png\" … />"))
so this will be easy for you.
Edit:
ActionLink Image with Style Sheet or Class Name
With Style sheet
@Html.Raw(@Ajax.ActionLink("[replacetext]", "Index", "Home", new AjaxOptions { UpdateTargetId="dvTest"}).ToHtmlString().Replace("[replacetext]", "<img src=\"/assets/img/logo.png\" style=\"width:10%\" ... />"))
With Class Name
<style>
.imgClass {
width:20%
}
@Html.Raw(@Ajax.ActionLink("[replacetext]", "Index", "Home", new AjaxOptions { UpdateTargetId="dvTest"}).ToHtmlString().Replace("[replacetext]", "<img src=\"/assets/img/logo.png\" class=\"imgClass\" ... />"))
For more reference regarding ActionLink around Image visit ActionLink around Image in Asp.net MVC

- 4,455
- 4
- 28
- 37
-
@LenielMacaferi Thanks . It's my pleasure that you got right solutions. – Dilip Langhanoja Jun 20 '14 at 07:05
-
this works thanks. Is there a way I can add css style to the image – Sumedha Vangury May 05 '16 at 07:00
-
@sumedha I have updated my answer regarding CSS style to image. I hope it will be useful to u. – Dilip Langhanoja May 05 '16 at 07:21
more easy...
change your code by:
<p class="site-title">@Html.ActionLink(" ", "Index", "Home",
new
{
style = "background: url('" + Url.Content("~/images/logo.png") + "') no-repeat center right; display:block; height:50px;width:50px;"
})</p>
-
Our you can just do this straight from CSS instead of using inline styles. – devlord Aug 07 '13 at 18:48
You can use url.content:
@Url.Content("~/images/img/slide.png")
this return relative path

- 93
- 2
- 9
You can create htmlhelper which can return image with link... As parameters you will pass to htmlhelper values like image path and link and in htmlhelper you will use StringBuilder to format html of that linked image properly...
cheers

- 1,874
- 1
- 21
- 36