【问题标题】:Asp.Net core Razor Taghelpers - mandatory parametersAsp.Net core Razor Taghelpers - 强制参数
【发布时间】:2020-01-30 12:00:09
【问题描述】:

如果我像这样创建一个 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 中出现红色曲线,这样错误就不会在运行时发生?

【问题讨论】:

    标签: asp.net-mvc asp.net-core razor asp.net-core-tag-helpers


    【解决方案1】:

    将所需的属性名称添加到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));
    
            // ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多