HTML Extension method for returning formatted HTML from a string in C#

Posted written by Paul Seal on November 23, 2017 Umbraco

What is this for?

This post shows you how to create an extension method for returning formatted HTML from a string input

For example if we wanted to make dolor sit be bold in the below text.

Lorem ipsum *dolor sit* amet

The result will be

Lorem ipsum dolor sit amet

Here is the code to make it work:

using System.Web;
using System.Web.Mvc;

namespace CodeShare.Library
{
    public static class HtmlExtensions
    {
        /// This HTML extension method replaces characters with HTML tags
        public static IHtmlString ReplaceStringWithHtmlTags(this HtmlHelper helper, string originalText, string toMatch, string tagToReplaceWith, string className = "")
        {
            string result = originalText;

                        if (!string.IsNullOrEmpty(result) && !string.IsNullOrEmpty(toMatch) && !string.IsNullOrEmpty(tagToReplaceWith))
            {
                int firstInstance = originalText.IndexOf(toMatch);
                int lastInstance = originalText.LastIndexOf(toMatch);
                if (lastInstance > firstInstance)
                {
                    result = originalText.Remove(lastInstance, toMatch.Length).Insert(lastInstance, string.Format("</{0}>", tagToReplaceWith));
                }
                if (firstInstance >= 0)
                {
                    if (!string.IsNullOrEmpty(className))
                    {
                        result = result.Remove(firstInstance, toMatch.Length).Insert(firstInstance, string.Format("<{0} class=\"{1}\">", tagToReplaceWith, className));
                    }
                    else
                    {
                        result = result.Remove(firstInstance, toMatch.Length).Insert(firstInstance, string.Format("<{0}>", tagToReplaceWith));
                    }
                }
            }

            return MvcHtmlString.Create(result);
        }
    }
}

Here is the usage example:

string inputText = "Lorem ipsum *dolor sit* amet"

@Html.ReplaceStringWithHtmlTags(inputText, "*", "strong") 

And it will return Html like this:

Lorem ipsum <strong>dolor sit</strong> amet

There is an optional className parameter too, in case you need to add a class to the html element.