TagHelper получает атрибут MaxLengthAttribute из ForExpression

Как получить атрибут MaxLength из выражения TagHelper ModelExpression?

Раньше я мог делать это в MVC 5.

var member = expression.Body as MemberExpression;

var maxLength = member?.Member
    .GetCustomAttributes(typeof(MaxLengthAttribute), false)
    .FirstOrDefault() as MaxLengthAttribute;

Мне нужно получить атрибут MaxLength, который находится в модели. Пример:

[MaxLength(5)]
[Display(Name = "First Name")]
public string FirstName { get; set; }

TagHelper предоставляет атрибут ModelExpression.Metadata.DisplayName и другие атрибуты, но не атрибуты MaxLength или StringLength.


person AdroitOldMan    schedule 06.05.2016    source источник
comment
Вы пытаетесь получить доступ к значению атрибута MaxLength для данного свойства на вашем сервере, верно?   -  person mariocatch    schedule 06.05.2016
comment
Да, доступ к атрибуту и ​​значению   -  person AdroitOldMan    schedule 06.05.2016


Ответы (1)


Вот способ получить любые метаданные валидатора:

Для переменной ForExpression задано значение ModelExpression через HtmlAttributeName.

    [HtmlAttributeName("for")]
    public ModelExpression ForExpression { get; set; }

Затем используйте коллекцию PropertyAttributes, чтобы получить желаемое свойство.

var maxLengthAttribute = ForExpression.Metadata.ValidatorMetadata.OfType<MaxLengthAttribute>().FirstOrDefault();

Изменено, чтобы избежать отражения, см. (Предоставление атрибутов модели)

person AdroitOldMan    schedule 06.05.2016