Как я могу получить доступ к атрибутам, которые не являются свойствами помощника по тегам, из помощника по тегам? - PullRequest
0 голосов
/ 10 октября 2019

Если у меня есть следующий помощник по тегам:

using Microsoft.AspNetCore.Razor.TagHelpers;  

namespace CustomTagHelper.TagHelpers  
{  
    [HtmlTargetElement("my-first-tag-helper")]  
    public class MyCustomTagHelper : TagHelper  
    {  
        public string Id { get; set; }
        public string Type { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)  
        {  

            output.SuppressOutput();
            output.Content.Clear();

            output.Content.SetHtmlContent($"<input id={Id} type={Type} />");  
        }  
    }  
}  

и в представлении я передаю это:

<my-first-tag-helper id="my-input" type="text" placeholder="type anything you want" autocomplete="off" disabled="disabled" />

Я хочу иметь доступ к любомудругой атрибут, который был добавлен к этому тегу, который не является свойством помощника по тегам , поэтому я могу добавить их в вывод. В этом примере это будут заполнители, автозаполнение и отключение.

В предыдущем примере результирующий тег должен быть:

<input id="my-input" type="text" placeholder="type anything you want" autocomplete="off" disabled="disabled" />

Итак, как мне получить доступ к атрибутам, которые не являются свойствами

1 Ответ

0 голосов
/ 21 октября 2019

Я просто наткнулся на ответ на свой вопрос.

Параметр с именем context , который передается методу Process, содержит свойство AllAttributes , которое какимя подразумевает, что содержит все переданные атрибуты независимо от того, существуют они как свойство или нет. Затем вы просто отфильтровываете существующие свойства и затем создаете атрибуты, которые остаются в списке.

Вот как выглядит решение:

using Microsoft.AspNetCore.Razor.TagHelpers;  
using System.Collections.Generic;
using System.Linq;

namespace CustomTagHelper.TagHelpers  
{  
    [HtmlTargetElement("my-first-tag-helper")]  
    public class MyCustomTagHelper : TagHelper  
    {  
        public string Id { get; set; }
        public string Type { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)  
        {  
            output.SuppressOutput();
            output.Content.Clear();

            // ------------------- Begin Extra Attributes --------------------

            var attributeObjects = context.AllAttributes.ToList();

            var props = this.GetType().GetProperties().Select(p => p.Name);

            attributeObjects.RemoveAll(a => props.Contains(a.Name));

            var extraAttributeList = new List<string>();

            foreach (var attr in attributeObjects)
            {
                extraAttributeList.Add($"{attr.Name}=\"{attr.Value}\"");
            }                                                                                                 

            // ------------------- End Extra Attributes --------------------

            output.Content.SetHtmlContent($"<input id={Id} type={Type} {string.Join(" ", extraAttributeList)}/>");
        }  
    }  
}  
...