1

如何从 TagHelper ModelExpression 中获取 MaxLength 属性?

我曾经能够在 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 属性

4

1 回答 1

1

以下是获取任何验证器元数据的方法:

ForExpression 变量通过 HtmlAttributeName 设置为 ModelExpression

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

然后使用 PropertyAttributes 集合来获取所需的属性

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

修改以避免反射,请参阅(暴露模型属性

于 2016-05-06T20:57:19.133 回答