|  |  | @ -8,6 +8,9 @@ using Microsoft.AspNetCore.Mvc.Rendering; | 
			
		
	
		
		
			
				
					
					|  |  |  | using Microsoft.AspNetCore.Mvc.TagHelpers; |  |  |  | using Microsoft.AspNetCore.Mvc.TagHelpers; | 
			
		
	
		
		
			
				
					
					|  |  |  | using Microsoft.AspNetCore.Mvc.ViewFeatures; |  |  |  | using Microsoft.AspNetCore.Mvc.ViewFeatures; | 
			
		
	
		
		
			
				
					
					|  |  |  | using Microsoft.AspNetCore.Razor.TagHelpers; |  |  |  | using Microsoft.AspNetCore.Razor.TagHelpers; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | using Microsoft.Extensions.Localization; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | using Microsoft.Extensions.Options; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | using Volo.Abp.AspNetCore.Mvc.Localization; | 
			
		
	
		
		
			
				
					
					|  |  |  | using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; |  |  |  | using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form |  |  |  | namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form | 
			
		
	
	
		
		
			
				
					|  |  | @ -16,11 +19,15 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         private readonly IHtmlGenerator _generator; |  |  |  |         private readonly IHtmlGenerator _generator; | 
			
		
	
		
		
			
				
					
					|  |  |  |         private readonly HtmlEncoder _encoder; |  |  |  |         private readonly HtmlEncoder _encoder; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         private readonly IStringLocalizerFactory _stringLocalizerFactory; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         private readonly AbpMvcDataAnnotationsLocalizationOptions _options; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         public AbpSelectTagHelperService(IHtmlGenerator generator, HtmlEncoder encoder) |  |  |  |         public AbpSelectTagHelperService(IHtmlGenerator generator, HtmlEncoder encoder, IOptions<AbpMvcDataAnnotationsLocalizationOptions> options, IStringLocalizerFactory stringLocalizerFactory) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |             _generator = generator; |  |  |  |             _generator = generator; | 
			
		
	
		
		
			
				
					
					|  |  |  |             _encoder = encoder; |  |  |  |             _encoder = encoder; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             _stringLocalizerFactory = stringLocalizerFactory; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             _options = options.Value; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         public override void Process(TagHelperContext context, TagHelperOutput output) |  |  |  |         public override void Process(TagHelperContext context, TagHelperOutput output) | 
			
		
	
	
		
		
			
				
					|  |  | @ -113,12 +120,32 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         protected virtual bool GetSelectItemsIfProvidedByEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List<SelectListItem> selectItems) |  |  |  |         protected virtual bool GetSelectItemsIfProvidedByEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List<SelectListItem> selectItems) | 
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             IStringLocalizer localizer = null; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             var resourceType = _options.AssemblyResources.GetOrDefault(explorer.ModelType.Assembly); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (resourceType != null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 localizer = _stringLocalizerFactory.Create(resourceType); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) |  |  |  |             selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 .Select((t, i) => new SelectListItem { Value = i.ToString(), Text = t.Name }).ToList() : null; |  |  |  |                 .Select((t, i) => new SelectListItem { Value = i.ToString(), Text = GetLocalizedPropertyName(localizer, explorer.ModelType, t.Name) }).ToList() : null; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             return selectItems != null; |  |  |  |             return selectItems != null; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         protected virtual string GetLocalizedPropertyName(IStringLocalizer localizer, Type enumType, string propertyName) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (localizer == null) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return propertyName; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             var localizedString = localizer[enumType.Name + "." + propertyName]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return !localizedString.ResourceNotFound ? localizedString.Value : localizer[propertyName].Value; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         protected virtual bool GetSelectItemsIfProvidedFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List<SelectListItem> selectItems) |  |  |  |         protected virtual bool GetSelectItemsIfProvidedFromAttribute(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer, out List<SelectListItem> selectItems) | 
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |             selectItems = GetAttribute<SelectItems>(explorer)?.GetItems(explorer)?.ToList(); |  |  |  |             selectItems = GetAttribute<SelectItems>(explorer)?.GetItems(explorer)?.ToList(); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |