With this article, I want to tell you about develop custom a HTML Helpers, thus that many of us could use inside the MVC 5 views, utilizing HTML Helpers class we will decrease the massive level of typing of HTML tags.
HTML Helpers
 A HTML Helper is simply a method which returns a string. The string can represent any kinds of content that you need. As an example, you are able to use HTML Helpers to render standard HTML tags such as HTML <input> and <img> tags. You can also use HTML Helpers to render a lot of complicated content such as a tab strip or an HTML table of database data.
The listed are many of the standard HTML Helpers currently added in ASP. NET MVC :
 Html.ActionLink() 
 Html.BeginForm() 
 Html.CheckBox() 
 Html.DropDownList() 
 Html.EndForm() 
 Html.Hidden() 
 Html.ListBox() 
 Html.Password() 
 Html.RadioButton() 
 Html.TextArea() 
 Html.TextBox() 

 Develop a HTML Helpers with Static Methods
 The easiest method to develop a new HTML Helper is to make a static method that returns a string. For example, that you decide to create some new HTML Helpers that render an HTML <Image> tag, HTML <ActionLink> tag, HTML <ActionLinkSortable> tag, HTML <DisplayAddress> tag and HTML < label> tag. And here is the example code that I used:
 public static class HtmlHelpers   
 {   
      /// <summary>  
      /// Creates an Html helper for an Image  
      /// </summary>   
      /// <param name="helper"></param>   
      /// <param name="src"></param>   
      /// <param name="altText"></param>   
      /// <returns></returns>      
      public static MvcHtmlString Image(this HtmlHelper helper, string src, string altText)   
      {   
          var builder = new TagBuilder("img");   
          builder.MergeAttribute("src", src);   
          builder.MergeAttribute("alt", altText);   
          return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));   
      }      
      //create an action link that can display html      
      public static MvcHtmlString ActionLinkHtml(this AjaxHelper ajaxHelper, string linkText, string actionName,   
  string controllerName, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes)   
      {   
          var repID = Guid.NewGuid().ToString();   
          var lnk = ajaxHelper.ActionLink(repID, actionName, controllerName, routeValues, ajaxOptions, htmlAttributes);   
          return MvcHtmlString.Create(lnk.ToString().Replace(repID, linkText));   
      }      
      //create an action link that can be clicked to sort and has a sorting icon (this is meant to be used to create column headers)   
      public static MvcHtmlString ActionLinkSortable(this HtmlHelper helper, string linkText, string actionName,   
  string sortField, string currentSort, object currentDesc)   
      {   
          bool desc = (currentDesc == null) ? false : Convert.ToBoolean(currentDesc);   
          //get link route values   
          var routeValues = new System.Web.Routing.RouteValueDictionary();   
          routeValues.Add("id", sortField);   
          routeValues.Add("desc", (currentSort == sortField) && !desc);   
          //build the tag   
          if (currentSort == sortField) linkText = string.Format("{0} <span class='badge'><span class='glyphicon glyphicon-sort-by-attributes{1}'></span></span>", linkText, (desc) ? "-alt" : "");
 TagBuilder tagBuilder = new TagBuilder("a");   
          tagBuilder.InnerHtml = linkText;   
          //add url to the link   
          var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);   
          var url = urlHelper.Action(actionName, routeValues);   
          tagBuilder.MergeAttribute("href", url);   
          //put it all together   
          return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));   
      }      
      //custom html helper to output a nicely-formatted address element      
      public static MvcHtmlString DisplayAddressFor<TModel, TProperty>(this HtmlHelper<TModel> helper,  
  System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, bool isEditable = false,   object htmlAttributes = null)   
    {   
         var valueGetter = expression.Compile();   
         var model = valueGetter(helper.ViewData.Model) as InGaugeService.Address;   
         var sb = new List<string>();   
         if (model != null)   
        {   
              if (!string.IsNullOrEmpty(model.AddressLine1)) sb.Add(model.AddressLine1);   
              if (!string.IsNullOrEmpty(model.AddressLine2)) sb.Add(model.AddressLine2);   
              if (!string.IsNullOrEmpty(model.AddressLine3)) sb.Add(model.AddressLine3);   
              if (!string.IsNullOrEmpty(model.City) || !string.IsNullOrEmpty(model.StateRegion) ||   !string.IsNullOrEmpty(model.PostalCode)) sb.Add(string.Format("{0}, {1} {2}", model.City,  model.StateRegion, model.PostalCode));   
              if (model.IsoCountry != null) sb.Add(model.IsoCountry.CountryName);   
              if (model.Latitude != null || model.Longitude != null) sb.Add(string.Format("{0}, {1}",   model.Latitude, model.Longitude));   
          }      
          var delimeter = (isEditable) ? Environment.NewLine : "<br />";   
          var addr = (isEditable) ? new TagBuilder("textarea") : new TagBuilder("address");            addr.MergeAttributes(new System.Web.Routing.RouteValueDictionary(htmlAttributes));        addr.InnerHtml = string.Join(delimeter, sb.ToArray());   
         return MvcHtmlString.Create(addr.ToString());   
      }   
      public static string Label(string target, string text)   
      {   
         return String.Format("<label for='{0}'>{1}</label>", target, text);   
      }      
      //Submit Button Helper   
      public static MvcHtmlString SubmitButton(this HtmlHelper helper, string buttonText)        
 {   
          string str = "<input type=\"submit\" value=\"" + buttonText + "\" />";   
          return new MvcHtmlString(str);   
      }  
  }