From 8b2ef179768838d8eadbe9a02453ce1bd64827b2 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 22 Dec 2020 20:02:00 +0800 Subject: [PATCH] Add AbpIdNameTagHelper --- .../TagHelpers/Form/AbpIdNameTagHelper.cs | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpIdNameTagHelper.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpIdNameTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpIdNameTagHelper.cs new file mode 100644 index 0000000000..e161f4b4c6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpIdNameTagHelper.cs @@ -0,0 +1,51 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form +{ + [HtmlTargetElement(Attributes = "abp-id-name")] + public class AbpIdNameTagHelper : AbpTagHelper + { + /// + /// Make sure this TagHelper is executed first. + /// + public override int Order => -1000 - 1; + + [HtmlAttributeName("abp-id-name")] + public ModelExpression IdNameFor { get; set; } + + private readonly ModelExpressionProvider _modelExpressionProvider; + private readonly MvcViewOptions _mvcViewOptions; + + public AbpIdNameTagHelper(ModelExpressionProvider modelExpressionProvider, IOptions mvcViewOptions) + { + _modelExpressionProvider = modelExpressionProvider; + _mvcViewOptions = mvcViewOptions.Value; + } + + public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + { + if (IdNameFor != null) + { + if (!context.AllAttributes.Any(x => x.Name.Equals("id", StringComparison.OrdinalIgnoreCase))) + { + var id = TagBuilder.CreateSanitizedId(IdNameFor.Name, _mvcViewOptions.HtmlHelperOptions.IdAttributeDotReplacement); + output.Attributes.Add("id", id); + } + + if (!context.AllAttributes.Any(x => x.Name.Equals("name", StringComparison.OrdinalIgnoreCase))) + { + output.Attributes.Add("name", IdNameFor.Name); + } + } + + return Task.CompletedTask; + } + } +}