Asp. Net core Razor Taghelpers - обязательные параметры - PullRequest
0 голосов
/ 30 января 2020

Если я создаю EmailTagHelper следующим образом:

public class EmailTagHelper : TagHelper
{
    public string EmailAddress { get; set; }
    public string Content { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "a";
        output.Attributes.SetAttribute("href", "mailto:" + this.EmailAddress);
        output.Content.SetContent(this.Content);
    }
}

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

<email content="Mail me!" email-address="hello@world.com"></email>

Однако я также могу сделать это без ошибки в Visual Studio или ошибка компиляции:

<email content="Mail me - but where!?"></email>

Есть ли способ пометить свойства как обязательные, чтобы они могли вызывать ошибки компиляции или, по крайней мере, красные помехи в Visual Studio, чтобы ошибка не возникала во время выполнения?

1 Ответ

1 голос
/ 30 января 2020

Добавьте требуемое имя атрибута в HtmlTargetElement:

[HtmlTargetElement("email", Attributes ="email-address")]
public class EmailTagHelper : TagHelper
{
    public string EmailAddress { get; set; }
    public string Content { get; set; }

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

Это решение не будет вызывать ошибки компиляции или показывать предупреждающее сообщение, но по крайней мере тег html не будет отображаться в полужирный зеленый в редакторе, пока вы не предоставите необходимые атрибуты.

Если вы хотите вызвать исключение, если атрибут не предоставлен, его необходимо удалить из атрибутов HtmlTargetElement:

[HtmlTargetElement("email")]
public class EmailTagHelper : TagHelper
{
    public string EmailAddress { get; set; }
    public string Content { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        if (string.IsNullOrWhiteSpace(EmailAddress))
            throw new ArgumentNullException(nameof(EmailAddress));

        // ...
    }
}
...