From c82cd8be7d238dbd5ee9e24084c3ffc315fc22c1 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 31 Dec 2018 14:28:01 +0300 Subject: [PATCH] Select & Radio tag helpers refactor --- .../Form/AbpRadioInputTagHelperService.cs | 47 +++++++++++++------ .../Form/AbpSelectTagHelperService.cs | 44 ++++++++++++----- 2 files changed, 63 insertions(+), 28 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs index c5ae2aebf4..d2e39b2831 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs @@ -26,6 +26,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public override void Process(TagHelperContext context, TagHelperOutput output) { var selectItems = GetSelectItems(context,output); + SetSelectedValue(context, output, selectItems); var order = GetInputOrder(TagHelper.AspFor.ModelExplorer); @@ -71,21 +72,25 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual List GetSelectItems(TagHelperContext context, TagHelperOutput output) { - var selectItems = TagHelper.AspItems?.ToList(); - - if (TagHelper.AspItems == null && - !GetSelectItemsIfProvidedByEnum(context, output, TagHelper.AspFor.ModelExplorer, out selectItems) && - !GetSelectItemsIfProvidedFromAttribute(context, output, TagHelper.AspFor.ModelExplorer, out selectItems)) + if (TagHelper.AspItems != null) + { + return TagHelper.AspItems.ToList(); + } + else if (TagHelper.AspFor.ModelExplorer.Metadata.IsEnum) + { + return GetSelectItemsFromEnum(context, output, TagHelper.AspFor.ModelExplorer); + } + else if (TagHelper.AspFor.ModelExplorer.Metadata.IsEnum) + { + return GetSelectItemsFromAttribute(context, output, TagHelper.AspFor.ModelExplorer); + } + else { throw new Exception("No items provided for select attribute."); } - - SetSelectedValue(context, output, selectItems); - - return selectItems; } - protected virtual bool GetSelectItemsIfProvidedByEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List selectItems) + protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) { IStringLocalizer localizer = null; var resourceType = _options.AssemblyResources.GetOrDefault(explorer.Container.ModelType.Assembly); @@ -95,10 +100,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form localizer = _stringLocalizerFactory.Create(resourceType); } - selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) + var selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) .Select((t, i) => new SelectListItem { Value = i.ToString(), Text = GetLocalizedPropertyName(localizer, explorer.ModelType, t.Name) }).ToList() : null; - return selectItems != null; + return selectItems; } protected virtual string GetLocalizedPropertyName(IStringLocalizer localizer, Type enumType, string propertyName) @@ -113,11 +118,23 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return !localizedString.ResourceNotFound ? localizedString.Value : localizer[propertyName].Value; } - protected virtual bool GetSelectItemsIfProvidedFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List selectItems) + protected virtual List GetSelectItemsFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) { - selectItems = GetAttribute(explorer)?.GetItems(explorer)?.ToList(); + var selectItemsAttribute = GetAttribute(explorer); + + if (selectItemsAttribute == null) + { + return null; + } - return selectItems != null; + var selectItems = selectItemsAttribute.GetItems(explorer)?.ToList(); + + if (selectItems == null) + { + return new List(); + } + + return selectItems; } protected virtual void SetSelectedValue(TagHelperContext context, TagHelperOutput output, List selectItems) 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 075bd062cf..0b90413f92 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 @@ -100,16 +100,22 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual List GetSelectItems(TagHelperContext context, TagHelperOutput output) { - var selectItems = TagHelper.AspItems?.ToList(); - - if (TagHelper.AspItems == null && - !GetSelectItemsIfProvidedByEnum(context, output, TagHelper.AspFor.ModelExplorer, out selectItems) && - !GetSelectItemsIfProvidedFromAttribute(context, output, TagHelper.AspFor.ModelExplorer, out selectItems)) + if (TagHelper.AspItems != null) + { + return TagHelper.AspItems.ToList(); + } + else if (TagHelper.AspFor.ModelExplorer.Metadata.IsEnum) + { + return GetSelectItemsFromEnum(context, output, TagHelper.AspFor.ModelExplorer); + } + else if (TagHelper.AspFor.ModelExplorer.Metadata.IsEnum) + { + return GetSelectItemsFromAttribute(context, output, TagHelper.AspFor.ModelExplorer); + } + else { throw new Exception("No items provided for select attribute."); } - - return selectItems; } protected virtual string GetLabelAsHtml(TagHelperContext context, TagHelperOutput output, TagHelperOutput selectTag) @@ -198,14 +204,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return localizer; } - protected virtual bool GetSelectItemsIfProvidedByEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List selectItems) + protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) { var localizer = GetLocalizer(); - selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) + var selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) .Select((t, i) => new SelectListItem { Value = i.ToString(), Text = GetLocalizedPropertyName(localizer, explorer.ModelType, t.Name) }).ToList() : null; - return selectItems != null; + return selectItems; } protected virtual string GetLocalizedPropertyName(IStringLocalizer localizer, Type enumType, string propertyName) @@ -220,11 +226,23 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return !localizedString.ResourceNotFound ? localizedString.Value : localizer[propertyName].Value; } - protected virtual bool GetSelectItemsIfProvidedFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List selectItems) + protected virtual List GetSelectItemsFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) { - selectItems = GetAttribute(explorer)?.GetItems(explorer)?.ToList(); + var selectItemsAttribute = GetAttribute(explorer); + + if (selectItemsAttribute == null) + { + return null; + } + + var selectItems = selectItemsAttribute.GetItems(explorer)?.ToList(); - return selectItems != null; + if (selectItems == null) + { + return new List(); + } + + return selectItems; } protected virtual string GetLabelAsHtmlUsingTagHelper(TagHelperContext context, TagHelperOutput output)