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();
Изменено, чтобы избежать отражения, см. ( Предоставление атрибутов модели)