| File: Language\TagHelpers\Producers\FormNameTagHelperProducer.cs | Web Access |
| Project: src\roslyn\src\Razor\src\Compiler\Microsoft.CodeAnalysis.Razor.Compiler\src\Microsoft.CodeAnalysis.Razor.Compiler.csproj (Microsoft.CodeAnalysis.Razor.Compiler) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.AspNetCore.Razor.Language.Components; using Microsoft.CodeAnalysis; namespace Microsoft.AspNetCore.Razor.Language.TagHelpers.Producers; internal sealed partial class FormNameTagHelperProducer : TagHelperProducer { private static readonly Lazy<TagHelperDescriptor> s_formNameTagHelper = new(CreateFormNameTagHelper); private readonly INamedTypeSymbol _renderTreeBuilderType; private FormNameTagHelperProducer(INamedTypeSymbol renderTreeBuilderType) { _renderTreeBuilderType = renderTreeBuilderType; } public override TagHelperProducerKind Kind => TagHelperProducerKind.FormName; public override bool SupportsStaticTagHelpers => true; public override void AddStaticTagHelpers(IAssemblySymbol assembly, ref TagHelperCollection.RefBuilder results) { if (assembly.Name != ComponentsApi.AssemblyName && !SymbolEqualityComparer.Default.Equals(assembly, _renderTreeBuilderType.ContainingAssembly)) { return; } results.Add(s_formNameTagHelper.Value); } private static TagHelperDescriptor CreateFormNameTagHelper() { using var _ = TagHelperDescriptorBuilder.GetPooledInstance( kind: TagHelperKind.FormName, name: "FormName", assemblyName: ComponentsApi.AssemblyName, builder: out var builder); builder.SetTypeName( fullName: "Microsoft.AspNetCore.Components.FormName", typeNamespace: "Microsoft.AspNetCore.Components", typeNameIdentifier: "FormName"); builder.CaseSensitive = true; builder.ClassifyAttributesOnly = true; builder.SetDocumentation(DocumentationDescriptor.FormNameTagHelper); builder.TagMatchingRule(rule => { rule.TagName = "*"; rule.Attribute(attribute => { attribute.Name = "@formname"; attribute.IsDirectiveAttribute = true; }); }); builder.BindAttribute(attribute => { attribute.SetDocumentation(DocumentationDescriptor.FormNameTagHelper); attribute.Name = "@formname"; attribute.TypeName = typeof(string).FullName; attribute.IsDirectiveAttribute = true; attribute.PropertyName = "FormName"; }); return builder.Build(); } }