From 9da812d9e7023839dd50dd856c7f5e1b746b913a Mon Sep 17 00:00:00 2001 From: yekalkan Date: Tue, 1 May 2018 14:38:46 +0300 Subject: [PATCH] select tag helper refactor --- .../TagHelpers/AbpTagHelperService.cs | 34 ++++++++++++++ .../Form/AbpInputTagHelperService.cs | 33 ++------------ .../Form/AbpSelectTagHelperService.cs | 45 +++++++------------ 3 files changed, 53 insertions(+), 59 deletions(-) diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs index 00b0a8714e..f668d3faac 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; using System.Text.Encodings.Web; using System.Threading.Tasks; @@ -75,6 +76,39 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers return context.Items[FormGroupContents] as List; } + protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + { + var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); + + return idAttr != null ? "for=\"" + idAttr.Value + "\"" : ""; + } + + protected virtual int GetInputOrder(ModelExplorer explorer) + { + return GetAttribute(explorer)?.Number ?? 0; + } + + protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order) + { + var list = GetFormGroupContentsList(context); + if (list != null && !list.Any(igc => igc.Html.Contains("id=\"" + propertyName.Replace('.', '_') + "\""))) + { + list.Add(new FormGroupContent + { + Html = html, + Order = order + }); + } + } + + protected virtual string GetFormInputGroupAsHtml(TagHelperContext context, TagHelperOutput output) + { + var inputTag = GetInputTag(context, out var isCheckbox); + var inputHtml = RenderTagHelperOutput(inputTag, _encoder); + var label = GetLabelAsHtml(inputTag, isCheckbox); + + return GetContent(label, inputHtml, isCheckbox); + } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index 23fc16e1f4..9259b7aaf6 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -29,30 +29,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { var html = GetFormInputGroupAsHtml(context, output); - var order = GetInputOrder(); + var order = GetInputOrder(TagHelper.AspFor.ModelExplorer); - AddGroupToFormGroupContents(GetFormGroupContentsList(context), html, order); + AddGroupToFormGroupContents(context,TagHelper.AspFor.Name, html, order); output.SuppressOutput(); } - protected virtual int GetInputOrder() - { - return GetAttribute(TagHelper.AspFor.ModelExplorer)?.Number ?? 0; - } - - protected virtual void AddGroupToFormGroupContents(List list, string html, int order) - { - if (list != null && !list.Any(igc => igc.Html.Contains("id=\"" + TagHelper.AspFor.Name.Replace('.', '_') + "\""))) - { - list.Add(new FormGroupContent - { - Html = html, - Order = order - }); - } - } - protected virtual string GetFormInputGroupAsHtml(TagHelperContext context, TagHelperOutput output) { var inputTag = GetInputTag(context, out var isCheckbox); @@ -98,12 +81,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { return ""; } - - var label = GetLabelValue(); + var checkboxClass = isCheckbox ? "class=\"form-check-label\" " : ""; return ""; } @@ -113,12 +95,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form TagHelper.AspFor.Metadata.DisplayName : TagHelper.Label; } - - protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) - { - var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); - - return idAttr != null ? "for=\"" + idAttr.Value + "\"" : ""; - } } } \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 9f1b904548..ea8418cc9b 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -25,28 +25,23 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public override void Process(TagHelperContext context, TagHelperOutput output) { - var selectTag = GetSelectTag(context); - - var seelctAsHtml = RenderTagHelperOutput(selectTag, _encoder); - var labelAsHtml = GetLabelAsHtml(selectTag); - var content = GetContent(labelAsHtml,seelctAsHtml); + var html = GetFormInputGroupAsHtml(context, output); + + var order = GetInputOrder(TagHelper.AspFor.ModelExplorer); - var order = GetAttribute(TagHelper.AspFor.ModelExplorer); - var list = context.Items["InputGroupContents"] as List; - - if (list != null && !list.Any(igc => igc.Html.Contains("id=\"" + TagHelper.AspFor.Name.Replace('.', '_') + "\""))) - { - list.Add(new FormGroupContent - { - Html = content, - Order = order?.Number ?? 0 - }); - } + AddGroupToFormGroupContents(context, TagHelper.AspFor.Name, html, order); output.SuppressOutput(); } + + protected virtual string GetFormInputGroupAsHtml(TagHelperContext context, TagHelperOutput output) + { + var selectTag = GetSelectTag(context); + var selectAsHtml = RenderTagHelperOutput(selectTag, _encoder); + var label = GetLabelAsHtml(selectTag); - + return GetContent(label, selectAsHtml); + } protected virtual string GetContent(string label, string inputHtml) { @@ -63,9 +58,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form Items = TagHelper.AspItems, ViewContext = TagHelper.ViewContext }; - - var attributes = new TagHelperAttributeList { new TagHelperAttribute("class", "form-control") }; - var inputTagHelperOutput = GetInnerTagHelper(attributes, context,selectTagHelper, "select", TagMode.StartTagAndEndTag); ; + + var inputTagHelperOutput = GetInnerTagHelper(new TagHelperAttributeList(), context,selectTagHelper, "select", TagMode.StartTagAndEndTag); ; inputTagHelperOutput.Attributes.Add("class", "form-control"); @@ -80,16 +74,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return ""; } - var label = GetLabelText(); - var idAttr = selectTag.Attributes.FirstOrDefault(a => a.Name == "id"); - var idAttrAsString = ""; - - if (idAttr != null) - { - idAttrAsString = "for=\"" + idAttr.Value + "\""; - } - - return ""; + return ""; } protected virtual string GetLabelText()