TagHelper ModelExpression元数据中不存在描述属性文本

时间:2019-05-23 09:07:33

标签: c# asp.net-core asp.net-core-tag-helpers

尝试编写自定义TagHelper以显示模型属性的Description属性。一切似乎都可以正常工作,但是描述文本没有传递到我的ModelExpression元数据上,它仍然是null

这是一个asp.net core 2.1应用程序。我在TagHelper的Process中遇到一个断点,因此它正在运行。 DisplayName道具在For.Metadata中是正确的,因此ModelExpression For可以正确解析。

该模型是在另一个程序集中定义的,而不是使用该代码的代码,这会成为问题吗?

型号:

public class MyModel {
  [Description("a description")]
  [DisplayName("display name")]
  public string MyProperty {get; set;}
}

TagHelper:

[HtmlTargetElement("span", Attributes = AttributeName)]
    public class DescriptionTagHelper : TagHelper
    {
        private const string AttributeName = "asp-description-for";

        /// <summary>
        /// An expression to be evaluated against the current model.
        /// </summary>
        [HtmlAttributeName(AttributeName)]
        public ModelExpression For { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (output == null)
            {
                throw new ArgumentNullException(nameof(output));
            }

            if (!output.IsContentModified)
            {
                output.Attributes.SetAttribute("class", "text-muted");
                output.Content.SetContent(For.Metadata.Description);
            }
        }
    }

用法:

<span asp-description-for="MyModel.MyProperty"></span>

使用智能感知,我可以看到For.Metadata.Attributes集合包含带有正确文本的DescriptionAttribute。我以为Description元数据应该是这个错误吗?

1 个答案:

答案 0 :(得分:0)

已解决,从a github issue中发现,asp.net核心不支持System.ComponentModel.DescriptionAttribute,并且System.ComponentModel.DataAnnotations.DisplayAttribute具有一个Description属性,该属性将相关的元数据文本填充到ModelExpression

很难找到有关的文档,希望有人四处寻找帮助。

tl; dr-将[Description("blah")]更改为[Display(Description="blah")]