Как использовать свойство 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>