public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var modalContext = new ModalContext(); context.Items.Add(typeof(ModalTagHelper), modalContext); await output.GetChildContentAsync(); var template = $@"<div class='modal-dialog' role='document'> <div class='modal-content'> <div class='modal-header'> <button type = 'button' class='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>×</span></button> <h4 class='modal-title' id='{context.UniqueId}Label'>{Title}</h4> </div> <div class='modal-body'>"; output.TagName = "div"; output.Attributes["role"] = "dialog"; output.Attributes["id"] = Id; output.Attributes["aria-labelledby"] = $"{context.UniqueId}Label"; output.Attributes["tabindex"] = "-1"; var classNames = "modal fade"; if (output.Attributes.ContainsName("class")) { classNames = string.Format("{0} {1}", output.Attributes["class"].Value, classNames); } output.Attributes["class"] = classNames; output.Content.AppendHtml(template); if (modalContext.Body != null) { output.Content.Append(modalContext.Body); } output.Content.AppendHtml("</div>"); if (modalContext.Footer != null) { output.Content.AppendHtml("<div class='modal-footer'>"); output.Content.Append(modalContext.Footer); output.Content.AppendHtml("</div>"); } output.Content.AppendHtml("</div></div>"); }