diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs index c28b7c3d71..59a45ec036 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs @@ -17,24 +17,30 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb await output.GetChildContentAsync(); - ProcessItems(context, output, list); + var listTagBulder = GetOlTagBuilder(); + + SetInnerList(context, output, list, listTagBulder); + + output.Content.SetHtmlContent(listTagBulder); } - protected virtual void ProcessItems(TagHelperContext context, TagHelperOutput output, List list) + protected virtual TagBuilder GetOlTagBuilder() { - SetLastOneActiveIfThereIsNotAny(context, output, list); + var builder = new TagBuilder("ol"); + builder.AddCssClass("breadcrumb"); + return builder; + } - var listElement = new TagBuilder("ol"); - listElement.AddCssClass("breadcrumb"); + protected virtual void SetInnerList(TagHelperContext context, TagHelperOutput output, List list, TagBuilder listTagBuilder) + { + SetLastOneActiveIfThereIsNotAny(context, output, list); foreach (var breadcrumbItem in list) { var htmlPart = SetActiveClassIfActiveAndGetHtml(breadcrumbItem); - listElement.InnerHtml.AppendHtml(htmlPart); + listTagBuilder.InnerHtml.AppendHtml(htmlPart); } - - output.Content.SetHtmlContent(listElement); } protected virtual List InitilizeFormGroupContentsContext(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs index f6c5d841fd..c3672db7f5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs @@ -31,8 +31,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel await output.GetChildContentAsync(); SetOneItemAsActive(context, output, itemList); - - SetItems(context, output, itemList); SetControls(context, output, itemList); SetIndicators(context, output, itemList); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs index 7a8e0b0571..c7f93e87cc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs @@ -30,10 +30,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse await output.GetChildContentAsync(); - ProcessItems(context, output, items); + SetContent(context, output, items); } - protected virtual void ProcessItems(TagHelperContext context, TagHelperOutput output, List items) + protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, List items) { foreach (var item in items) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index f71f8c030f..e629572658 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -441,6 +441,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return idAttr != null ? idAttr.Value.ToString() : string.Empty; } + protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + { + var id = GetIdAttributeValue(inputTag); + + return !string.IsNullOrWhiteSpace(id) ? "for=\"" + id + "\"" : string.Empty; + } + protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) { var list = context.GetValue>(FormGroupContents) ?? new List(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index b5ca866b7a..d978fe5f5e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -349,6 +349,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return idAttr != null ? idAttr.Value.ToString() : string.Empty; } + protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + { + var id = GetIdAttributeValue(inputTag); + + return !string.IsNullOrWhiteSpace(id) ? "for=\"" + id + "\"" : string.Empty; + } + protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) { var list = context.GetValue>(FormGroupContents) ?? new List(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs index a9d13b795a..7ee1fdd0e9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs @@ -19,21 +19,20 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { output.TagName = "div"; output.Attributes.AddClass("modal-header"); - - AddTitle(context, output); - AddCloseButton(context, output); + output.PreContent.SetHtmlContent(CreatePreContent()); + output.PostContent.SetHtmlContent(CreatePostContent()); } - protected virtual void AddTitle(TagHelperContext context, TagHelperOutput output) + protected virtual string CreatePreContent() { var title = new TagBuilder("h5"); title.AddCssClass("modal-title"); title.InnerHtml.Append(TagHelper.Title); - output.PreContent.SetHtmlContent(title); + return RenderHtml(title); } - protected virtual void AddCloseButton(TagHelperContext context, TagHelperOutput output) + protected virtual string CreatePostContent() { var span = new TagBuilder("span"); span.Attributes.Add("aria-hidden", "true"); @@ -46,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal button.Attributes.Add("aria-label", L["Close"].Value); button.InnerHtml.AppendHtml(span); - output.PostContent.AppendHtml(button); + return RenderHtml(button); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs index 56c24ea384..78d664b562 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Html; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; using System.Text; using System.Threading.Tasks; @@ -13,40 +14,54 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal var childContent = await output.GetChildContentAsync(); - Process(context, output, childContent); + SetContent(context, output, childContent); } - protected virtual void Process(TagHelperContext context, TagHelperOutput output, TagHelperContent content) + protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) { - var modalContent = new TagBuilder("div"); - modalContent.AddCssClass(GetModalContentClasses()); - modalContent.InnerHtml.AppendHtml(content); + var modalContent = GetModalContentElement(context, output, childContent); + var modalDialog = GetModalDialogElement(context, output, modalContent); + var modal = GetModal(context, output, modalDialog); - var modalDialog = new TagBuilder("div"); - modalDialog.AddCssClass(GetModalDialogClasses()); - modalDialog.Attributes.Add("role", "document"); - modalDialog.InnerHtml.AppendHtml(modalContent); - - var modal = new TagBuilder("div"); - modal.AddCssClass(GetModalClasses()); - modal.Attributes.Add("tabindex", "-1"); - modal.Attributes.Add("role", "dialog"); - modal.Attributes.Add("aria-hidden", "true"); + output.Content.SetHtmlContent(modal); + } + + protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) + { + var element = new TagBuilder("div"); + element.AddCssClass(GetModalContentClasses()); + element.InnerHtml.SetHtmlContent(childContent); + return element; + } + + protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) + { + var element = new TagBuilder("div"); + element.AddCssClass(GetModalDialogClasses()); + element.Attributes.Add("role", "document"); + element.InnerHtml.SetHtmlContent(innerHtml); + return element; + } + + protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) + { + var element = new TagBuilder("div"); + element.AddCssClass(GetModalClasses()); + element.Attributes.Add("tabindex", "-1"); + element.Attributes.Add("role", "dialog"); + element.Attributes.Add("aria-hidden", "true"); foreach (var attr in output.Attributes) { - modal.Attributes.Add(attr.Name, attr.Value.ToString()); + element.Attributes.Add(attr.Name, attr.Value.ToString()); } - if (TagHelper.Static == true) - { - modal.Attributes.Add("data-backdrop", "static"); - } + SetDataAttributes(element); - modal.InnerHtml.AppendHtml(modalDialog); + element.InnerHtml.SetHtmlContent(innerHtml); - output.Content.SetHtmlContent(modal); - } + return element; + } protected virtual string GetModalClasses() { @@ -76,5 +91,22 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { return "modal-content"; } + + protected virtual string GetDataAttributes() + { + if (TagHelper.Static == true) + { + return "data-backdrop=\"static\" "; + } + return string.Empty; + } + + protected virtual void SetDataAttributes(TagBuilder builder) + { + if (TagHelper.Static == true) + { + builder.Attributes.Add("data-backdrop", "static"); + } + } } } \ No newline at end of file