For a specific scenario recently, I wanted to display the HTML-encoded output of a TagHelper in ASP.NET Core. So I wanted to use the TagHelper, but not output its actual result, but see the raw HTML which would have been included in my template.
So I created another TagHelper, which allows me to wrap any HTML, inline code in ASP.NET Core and other TagHelpers, and get all the content inside the TagHelper's tag to be HTML-encoded, like this:
<html-encode>
<a href="@Url.Action("Index")">Read More</a>
@Html.TextBox("No_Longer_Recommended-TagHelpers_Preferred")
<my-other-tag-helper />
</html-encode>
From this, I will get the raw HTML of the link with an UrlHelper-result, the result of the HTML-helper and the result of my other TagHelper.
The source-code for the html-encode
-TagHelper is as follows:
[HtmlTargetElement("html-encode", TagStructure = TagStructure.NormalOrSelfClosing)]
public class HtmlEncodeTagHelper : TagHelper
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var childContent = output.Content.IsModified
? output.Content.GetContent()
: (await output.GetChildContentAsync()).GetContent();
string encodedChildContent = WebUtility.HtmlEncode(childContent ?? string.Empty);
output.TagName = null;
output.Content.SetHtmlContent(encodedChildContent);
}
}