The best part of the asp.net mvc framework is that it is extensible. You can extend the things according to your business requirements.
For creating a link in ASP.NET MVC, we use Link Extension provided by the MVC framework. For creating a simple anchor tag, we use Html.ActionLink() helper which generates an anchor tag for us.
For example:
- @Html.ActionLink("Link Display Text","Index","Home")
This will render the following html:
- <a href="/Home/Index">Link Display Text</a>
Now if we want to create an image link, we can use html to create image link this way:
- <a href="/Home/Index">
- <img src="/images/untitled.png">
- </a>
This will work obviously, but what if we want to do it with Html Helper method as we do using Html.ActionLink, but we do not have any helper for the image link provided by framework? One can do it using html as I wrote above, or you will have to write a custom html helper.
It's the beauty of ASP.NET MVC that we can extend existing helpers according to our needs and can also add new html helpers in case we need to use it in many places. In that case, a better approach is to create a helper extension and use it everywhere in the project.
Now for creating a helper extension, first of all, we need to create a static class, as it's the pre-requisite for creating extension methods that the method should be static, and it should be inside a static class.
Here is the code for extension method for ImageActionLink helper extension:
- namespace MyApplication.Helpers
-
- {
-
- public static class CustomHtmlHelepers
-
- {
-
- public static IHtmlStringImageActionLink(this HtmlHelperhtmlHelper,
-
- string linkText, string action, string controller,
-
- object routeValues, object htmlAttributes, stringimageSrc)
-
- {
-
- varurlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
-
- varimg = new TagBuilder("img");
-
- img.Attributes.Add("src", VirtualPathUtility.ToAbsolute(imageSrc));
-
- var anchor = new TagBuilder("a")
-
- {
- InnerHtml = img.ToString(TagRenderMode.SelfClosing)
- };
-
- anchor.Attributes["href"] = urlHelper.Action(action, controller, routeValues);
-
- anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));
-
- returnMvcHtmlString.Create(anchor.ToString());
-
- }
-
- }
-
- }
The first parameter with this keyword is used in extension methods. See this article on Extension Method for understanding what extension methods are.
And now, we can call it from View for creating image link. Remember that we will have to include the namespace in the View in which we have to create the class and extension method, but if you have to create it in the same namespace, then it will be accessible without adding any using statement in View.
In my case, I have separated all Extension Methods in a separate namespace named Helpers, so I will have to include it in View via using statement:
- @using MyApplication.Helpers;
-
- @Html.ImageActionLink("Link Display Text","Index","Home",null,null,"~/images/untitled.png")
It will render the same html which I wrote above::
- <a href="/Home/Index">
- <img src="/images/untitled.png">
- </a>
I hope this helps you understand how to write your own custom HTML Helpers in ASP.NET MVC.
Bhavik PatelPosted Jul 19, 2016, 9:55 PM
Nice. Can you please share ouput? how it look a like.
Ehsan SajjadPosted Jul 19, 2016, 7:29 AM
Thanks for the read and appreciation Shobana J
Shobana JPosted Jul 19, 2016, 2:32 AM
Nice one
Ehsan SajjadPosted Jan 14, 2016, 7:32 AM
Thanks Ankit Bansal and Raja T
Ankit BansalPosted Jan 14, 2016, 12:11 AM
thanks for sharing..keep it up
Raja TPosted Jan 13, 2016, 11:31 PM
Nice, Thanks for sharing
Humayun Kabir MamunPosted Jan 13, 2016, 10:43 PM
Nice...
Ehsan SajjadPosted Jan 13, 2016, 1:36 PM
Thanks P K Yadav
Ehsan SajjadPosted Jan 13, 2016, 1:35 PM
Thanks Nanddeep Nachan
Nanddeep NachanPosted Jan 13, 2016, 1:25 PM
Nice share
Praveen KumarPosted Jan 13, 2016, 12:04 PM
Good one :) Ehsan, thank you for sharing
Ehsan SajjadPosted Jan 13, 2016, 10:30 AM
Thanks for appreciation
Santhakumar MunuswamyPosted Jan 13, 2016, 9:50 AM
Thanks for sharing.