This is my implementation for easier re-use
Helper Method Extension class
namespace Extensions {
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class HtmlExtensions {
public static MvcHtmlString FALink(this HtmlHelper htmlHelper, string action, string controller, string link_text, string fa_class, string btn_css_classes = "", string button_id = "", object route_values = null) {
// declare the span
TagBuilder span = new TagBuilder("span");
span.AddCssClass($"fa fa-{fa_class}");
span.MergeAttribute("aria-hidden", "true");
// declare the anchor tag
TagBuilder anchor = new TagBuilder("a");
// Add the href attribute to the <a> element
if (string.IsNullOrEmpty(controller) || string.IsNullOrEmpty(action))
anchor.MergeAttribute("href", "#");
else
anchor.MergeAttribute("href", new UrlHelper(HttpContext.Current.Request.RequestContext).Action(action, controller, route_values));
// Add the <span> element and the text to the <a> element
anchor.InnerHtml = $"{span} {link_text}";
anchor.AddCssClass(btn_css_classes);
anchor.GenerateId(button_id);
// Create the helper
return MvcHtmlString.Create(anchor.ToString(TagRenderMode.Normal));
}
}
}
Make sure you include the namespace in the View so method is available
Example usages in Razor View
You can pass any route values you desire like any stock @Html helper using commas to separate values
using all parms:
@Html.FALink("ActionNameHere", "ControllerNameHere", "Back to List", "th-list", "btn btn-info", "btn_back_to_list", new {area="AreaNameHere"})
basic link type button:
@Html.FALink("ActionNameHere", "ControllerNameHere", "Back to List, "th-list")
basic link type button using bootstrap to color text
@Html.FALink("ActionNameHere", "ControllerNameHere", "Back to List", "th-list, "btn-info")
- While I use Font Awesome you could easily replace fa with bootstraps glyphicon class to use the bootstrap glyphicons
- If no controller or Action is passed in, it uses # as the link location so it will play nice with drop down interaction