Текст атрибута описания отсутствует в метаданных TagHelper ModelExpression - PullRequest
0 голосов
/ 23 мая 2019

Попытка написать собственный TagHelper для отображения атрибута Description свойства модели.Кажется, все работает иначе, но текст описания не передается моим метаданным ModelExpression, он остается null.

Это приложение ядра 2.1 для asp.net.Я достигаю точки останова в Process моего TagHelper, так что он запускается.Значение 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>

Используя intellisense, я вижу, что коллекция For.Metadata.Attributes содержит DescriptionAttribute с правильным текстом.Неправильно ли я считать, что метаданные Description должны быть такими?

1 Ответ

0 голосов
/ 24 мая 2019

Решено, из обнаружена проблема github , что System.ComponentModel.DescriptionAttribute не поддерживается в ядре asp.net, а System.ComponentModel.DataAnnotations.DisplayAttribute имеет атрибут Description, который заполняет соответствующий текст метаданных в ModelExpression

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

tl; dr - измените [Description("blah")] на [Display(Description="blah")]

...