From 5bcccd4866fffc40cb1d6da166d2824222515cd9 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 19 Dec 2018 14:05:04 +0300 Subject: [PATCH] abp select tag helper fixes --- .../TagHelpers/AbpTagHelperService.cs | 2 + .../Form/AbpSelectTagHelperService.cs | 73 +++++++++---------- 2 files changed, 36 insertions(+), 39 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs index 332210271b..ce47163be0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs @@ -66,6 +66,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers var innerContext = new TagHelperContext(attributeList, context.Items, Guid.NewGuid().ToString()); + tagHelper.Init(context); + if (runAsync) { AsyncHelper.RunSync(() => tagHelper.ProcessAsync(innerContext, innerOutput)); 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 ad5b4c62cf..7caf61b47e 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 @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -38,6 +39,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { output.TagName = "div"; output.Attributes.AddClass("form-group"); + LeaveOnlyGroupAttributes(context, output); output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetHtmlContent(innerHtml); } @@ -59,16 +61,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual TagHelperOutput GetSelectTag(TagHelperContext context, TagHelperOutput output) { - var selectItems = GetSelectItems(context, output); - var selectTagHelper = new SelectTagHelper(_generator) { For = TagHelper.AspFor, - Items = selectItems, + Items = GetSelectItems(context, output), ViewContext = TagHelper.ViewContext }; - var inputTagHelperOutput = GetInnerTagHelper(new TagHelperAttributeList(), context, selectTagHelper, "select", TagMode.StartTagAndEndTag); + var inputTagHelperOutput = GetInnerTagHelper(GetInputAttributes(context, output), context, selectTagHelper, "select", TagMode.StartTagAndEndTag); inputTagHelperOutput.Attributes.AddClass("form-control"); inputTagHelperOutput.Attributes.AddClass(GetSize(context,output)); @@ -98,8 +98,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form throw new Exception("No items provided for select attribute."); } - SetSelectedValue(context, output, selectItems); - return selectItems; } @@ -128,39 +126,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return selectItems != null; } - protected virtual void SetSelectedValue(TagHelperContext context, TagHelperOutput output, List selectItems) - { - if (!selectItems.Any(si => si.Selected)) - { - var selectedValue = GetSelectedValue(context, output); - - var itemToBeSelected = selectItems.FirstOrDefault(si => si.Value.ToString() == selectedValue); - - if (itemToBeSelected != null) - { - itemToBeSelected.Selected = true; - } - } - } - - protected virtual string GetSelectedValue(TagHelperContext context, TagHelperOutput output) - { - var modelExplorer = TagHelper.AspFor.ModelExplorer; - - if (modelExplorer.Metadata.IsEnum) - { - var baseType = modelExplorer.Model?.GetType().GetEnumUnderlyingType(); - - if (baseType == null) { return null; } - - return Convert.ChangeType(modelExplorer.Model, baseType)?.ToString() ?? ""; - } - else - { - return modelExplorer.Model?.ToString(); - } - } - protected virtual string GetLabelAsHtmlUsingTagHelper(TagHelperContext context, TagHelperOutput output) { var labelTagHelper = new LabelTagHelper(_generator) @@ -193,5 +158,35 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return ""; } + + protected virtual TagHelperAttributeList GetInputAttributes(TagHelperContext context, TagHelperOutput output) + { + var groupPrefix = "group-"; + + var tagHelperAttributes = output.Attributes.Where(a => !a.Name.StartsWith(groupPrefix)).ToList(); + var attrList = new TagHelperAttributeList(); + + foreach (var tagHelperAttribute in tagHelperAttributes) + { + attrList.Add(tagHelperAttribute); + } + + return attrList; + } + + protected virtual void LeaveOnlyGroupAttributes(TagHelperContext context, TagHelperOutput output) + { + var groupPrefix = "group-"; + var tagHelperAttributes = output.Attributes.Where(a => a.Name.StartsWith(groupPrefix)).ToList(); + + output.Attributes.Clear(); + + foreach (var tagHelperAttribute in tagHelperAttributes) + { + var nameWithoutPrefix = tagHelperAttribute.Name.Substring(groupPrefix.Length); + var newAttritube = new TagHelperAttribute(nameWithoutPrefix, tagHelperAttribute.Value); + output.Attributes.Add(newAttritube); + } + } } } \ No newline at end of file