protected override void BootstrapProcess(TagHelperContext context, TagHelperOutput output) { bool hasNavContext = context.HasNavContext(); if (hasNavContext) { output.TagName = "li"; output.Attributes.Add("role", "presentation"); Context = null; Splitted = false; } else { output.TagName = "div"; output.AddCssClass("btn-group"); if (Size.HasValue && Size != BootstrapTagHelpers.Size.Default) output.AddCssClass("btn-group-" + Size.Value.GetDescription()); } if (context.HasInputGroupContext()) { Size = BootstrapTagHelpers.Size.Default; if (!context.HasInputGroupAddonContext()) { output.TagName = "span"; output.AddCssClass("input-group-btn"); } } if (Dropup) output.AddCssClass("dropup"); var buttonBuilder = new TagBuilder(Href == null && !hasNavContext ? "button" : "a"); buttonBuilder.InnerHtml.AppendHtml(Text); if (!hasNavContext) { buttonBuilder.AddCssClass("btn"); buttonBuilder.AddCssClass("btn-" + (Context ?? ButtonContext.Default).ToString().ToLower()); if (Href == null) buttonBuilder.Attributes.Add("type", "button"); if (ButtonId != null) buttonBuilder.Attributes.Add("id", ButtonId); else { buttonBuilder.Attributes.Add("href", Href); if (!Splitted) buttonBuilder.Attributes.Add("role", "button"); } } else { buttonBuilder.Attributes.Add("href",Href); } if (Splitted) { output.PreContent.Append(buttonBuilder); buttonBuilder = new TagBuilder("button") { Attributes = { {"type", "button"}, {"class", "btn btn-" + (Context ?? ButtonContext.Default).ToString().ToLower()} } }; } else buttonBuilder.InnerHtml.AppendHtml(" "); buttonBuilder.AddCssClass("dropdown-toggle"); buttonBuilder.Attributes.Add("data-toggle", "dropdown"); buttonBuilder.Attributes.Add("aria-haspopup", "true"); buttonBuilder.Attributes.Add("aria-expanded", "false"); buttonBuilder.InnerHtml.AppendHtml("<span class=\"caret\">"); output.PreContent.Append(buttonBuilder); output.PreContent.AppendHtml(RightAligned ? "<ul class=\"dropdown-menu dropdown-menu-right\">" : "<ul class=\"dropdown-menu\">"); output.PostContent.AppendHtml("</ul>"); }