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

1 ответ

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

Переменная ForExpression установлена ​​в ModelExpression через HtmlAttributeName

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

Затем используйте PropertyAttributes collection для получения желаемого свойства

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

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

Другие вопросы по тегам