If we check what you have, the only property that you are using is PersonName. As for the markup itself, everything else is good old HTML.
So you don't need to replace anything. What you need is to have constructor that has a dependency on IHtmlGenerator
. This will get automatically injected and you will be able to generate the different tags based on your model.
Relevant IHtmlGenerator
Signature:
public interface IHtmlGenerator
{
...
TagBuilder GenerateValidationMessage(
ViewContext viewContext,
string expression,
string message,
string tag,
object htmlAttributes);
TagBuilder GenerateLabel(
ViewContext viewContext,
ModelExplorer modelExplorer,
string expression,
string labelText,
object htmlAttributes);
TagBuilder GenerateTextBox(
ViewContext viewContext,
ModelExplorer modelExplorer,
string expression,
object value,
string format,
object htmlAttributes);
...
}
And that's it!
Here's a bit of code that would capture the basic tag:
[HtmlTargetElement("bootstraprow")]
public BootstrapRowTagHelper: TagHelper
{
protected IHtmlGenerator Generator { get; set; }
public InputTagHelper(IHtmlGenerator generator)
{
Generator = generator;
}
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
//todo: write your html generating code here.
}
}
Here's a repo with sample code that generates Bootstrap HTML from TagHelpers:
https://github.com/dpaquette/TagHelperSamples/blob/master/TagHelperSamples/src/TagHelperSamples.Bootstrap/