Как получить значение атрибута HTML с помощью TagHelper? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть простой помощник по тегам ASP.NET Core 2.1, который добавляет атрибут style, если его еще не существует:

[HtmlTargetElement(Attributes = "yellow")] //contains "yellow" attribute
    public class YellowTagHelper : TagHelper
    {
       public override void Process(TagHelperContext context, TagHelperOutput output)
       {
            if (!output.Attributes.ContainsName("style"))
            {
                output.Attributes.SetAttribute("style", "color: yellow;");
            }
            else
            {
                //how to add 'color: yellow;' value, if 'style' attribute exists already?
                //or how to retrieve existing 'style' value? then I will be able to create new one
            }
       }
   }

И использует его следующим образом:

<div class="element1" id="el1id" runat="server" yellow>
        TEST el1 //here is fine
    </div>
    <div class="element2" id="el2id" runat="server" style="background-color: pink" yellow>
        TEST el2 //here I want to add 'color: yellow;'
    </div>

И я застрял в поиске решения, как обновить значение атрибута стиля с помощью моего помощника по тегам.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Хорошо, я нашел то, что искал.Решение основано на ответе >> НАСТОЯЩЕМ << </a>, включает в себя уже берущий цвет из БД:

[HtmlTargetElement(Attributes = "yellow")] //contains "yellow" attribute
    public class YellowTagHelper : TagHelper
    {
        private ApplicationDbContext _context;

        public YellowTagHelper(ApplicationDbContext ctx)
        {
            _context = ctx;
        }
       public override void Process(TagHelperContext context, TagHelperOutput output)
       {
            var colors = _context.ColorPanels.FirstOrDefault(); //context
            var colorStyle = "color:" + colors.Element3BackgroundColor; //new color
            if (!output.Attributes.ContainsName("style"))
            {
                output.Attributes.SetAttribute("style", colorStyle);
            }
            else
            {
                var currentAttribute = output.Attributes.FirstOrDefault(attribute => attribute.Name == "style"); //get value of 'style'
                string newAttributeValue = $"{currentAttribute.Value.ToString() + "; " + colorStyle}"; //combine style values
                output.Attributes.Remove(currentAttribute); //remove old attribute
                output.Attributes.SetAttribute("style", newAttributeValue); //add merged attribute values
            }
        }
   }
0 голосов
/ 27 декабря 2018

Создайте сервис

public class ColorService
{

    public ColorService()
    {
    }

    public string GetColor()
    {
        // Add your logic here
        return "Yellow";
    }
}

И, на ваш взгляд, просто введите его

@inject ColorService ColorService;

И позже в представлении:

<div class="element2" id="el2id" runat="server" style="background-color: @ColorService.GetColor()" yellow>
    TEST el2 //here I want to add 'color: yellow;'
</div>

Вы можете обратитьсяк этому ответу для более подробной информации, если вам нужно добавить контекст Db в ваш сервис ASP.NET Core 2.1 вставить CSS в макет на основе данных в БД

...