using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace TestingSite.TagHelpers;
[HtmlTargetElement("radio")]
public class RadioTagHelper : TagHelper
private readonly IHtmlGenerator _generator;
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
[HtmlAttributeName("asp-items")]
public Dictionary<string, string> Items { get; set; }
public RadioTagHelper(IHtmlGenerator generator)
public override void Process(TagHelperContext context, TagHelperOutput output)
var radioGroup = new TagBuilder("div");
radioGroup.AddCssClass("radio-group");
foreach (var item in Items)
var radio = CreateRadioItem(item.Key, item.Value);
radioGroup.InnerHtml.AppendHtml(radio);
output.Content.AppendHtml(radioGroup);
private TagBuilder CreateRadioItem(string value, string text)
var radioItem = new TagBuilder("div");
radioItem.AddCssClass("radio-item");
var radioInput = new TagBuilder("input");
radioInput.Attributes.Add("type", "radio");
radioInput.Attributes.Add("name", For.Name);
radioInput.Attributes.Add("value", value);
if (For.Model?.ToString() == value)
radioInput.Attributes.Add("checked", "checked");
var radioLabel = new TagBuilder("label");
radioLabel.InnerHtml.AppendHtml(radioInput);
radioLabel.InnerHtml.Append(text);
radioItem.InnerHtml.AppendHtml(radioLabel);