Как использовать свойство Attributes в HtmlTargetElement (Tag Helpers) для нацеливания одного тега или другого?

Я борюсь с пониманием того, как показать строку, назначенную атрибутам в атрибуте класса HtmlTargetElement, работает. У меня есть пара вопросов, которые, я думаю, подчеркнут мою проблему и понимание.

Допустим, мы хотим активировать элемент HTML только тогда, когда make начинается с gm и есть какая-либо модель. Я думаю, что есть способ сделать это с помощью одного атрибута класса (не нескольких).

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

Tag Helper Class

[HtmlTargetElement("auto-price", Attributes = "[make^=gm][model]")]
public class AutoPriceTagHelper : TagHelper
{

и бритва разметка

<auto-price make="gm" model="volt" ></auto-price>
<auto-price make="ford" model="mustang"></auto-price>
<auto-price make="ford" ></auto-price>
<auto-price test></auto-price>

1 ответ

Решение

Это на самом деле работает так, как вы ожидали. Единственное, чего вам не хватает - это Attributes список атрибутов, разделенных запятыми, поэтому при указании нескольких запятых Attributes = "[make^=gm],[model]",

Итак, следующая макетная версия вашего помощника:

[HtmlTargetElement("auto-price", Attributes = "[make^=gm],[model]")]
public class AutoPriceTagHelper : TagHelper
{
    public string Make { get; set; }
    public string Model { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "ul";
        output.Content.SetHtmlContent(
$@"<li>Make: {Make}</li>
<li>Model: {Model}</li>");
    }
}

Со следующей разметкой бритвы:

<auto-price make="gm" model="volt" ></auto-price>
<auto-price make="ford" model="mustang"></auto-price>
<auto-price make="gmfoo" model="the foo"></auto-price>
<auto-price make="gmbar"></auto-price>
<auto-price test></auto-price>

Будет соответствовать только первое и третье появления, так как они единственные с обоими обязательными атрибутами (make а также model) и соответствует условию префикса ^gm для make приписывать.

В результате HTML выглядит так:

<ul><li>Make: gm</li>
<li>Model: volt</li></ul>
<auto-price make="ford" model="mustang"></auto-price>
<ul><li>Make: gmfoo</li>
<li>Model: the foo</li></ul>
<auto-price make="gmbar"></auto-price>
<auto-price test=""></auto-price>
Другие вопросы по тегам