【问题标题】:In ASP.NET Core Tag Helper public Attribute not working as expected在 ASP.NET Core Tag Helper 中,公共属性未按预期工作
【发布时间】:2016-11-12 00:53:22
【问题描述】:

我已经从 ASP.NET 核心复制了电子邮件标签助手的演示。

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring

当我在我的视图页面上创建一个如下所示的标签时:

<div>
  <Email MailTo="abc"></Email>
</div>

我希望公共属性 MailTo 将被设置,但它不是(当我调试时,它显示为 null)。但是,当我从 TagHelperOutput 获取输出属性时,如下所示:

var mailToWorks = output.Attributes["MailTo"].Value.ToString();

mailToWorks 如我所料得到“abc”,但未设置公共属性 MailTo。我的 Tag Helper 源代码如下。

    [HtmlTargetElement("Email")]
    public class EmailTagHelper : TagHelper
    {
        private const string EmailDomain = "contoso.com";

        // Can be passed via <email mail-to="..." />. 
        // Pascal case gets translated into lower-kebab-case.
        public string MailTo { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var mailToWorks = output.Attributes["MailTo"].Value.ToString();

            output.TagName = "a";    // Replaces <email> with <a> tag

            var address = MailTo + "@" + EmailDomain;
            output.Attributes.SetAttribute("href", "mailto:" + address);
            output.Content.SetContent(address);
        }
    }

【问题讨论】:

  • 我认为它说你应该有这个:
  • 谢谢@SerifEmek 你是对的,这解决了问题。奇怪的是,智能感知建议紫色的“MailTo”。一旦我输入它,它也喜欢 mail-to。这有意义吗?
  • 不客气。不,它没有。实际上,我对用法并不熟悉。刚刚从您的链接中了解到。

标签: razor asp.net-core


【解决方案1】:

如果你想关闭小写kebab-case的翻译,你可以使用HtmlAttributeNameAttribute

// matches <email MailTo="..." />
[HtmlAttributeName(nameof(MailTo))]
public string MailTo { get; set; }

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 2021-02-08
    • 1970-01-01
    • 2020-04-26
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多