我希望编写自定义验证属性,并将具有验证错误的其他成员名称添加到验证结果中。问题在于,我想根据属性名称和无效匹配属性索引或键(我想验证IEnumerables或IDictionaries)动态生成成员名称,例如Names [0] ,
Names [1] ,
Names [key] 等。例如:
模型:
public class ModelClass
{
[ItemMaxLength(10)]
[Display(ResourceType = typeof(CategoriesRename), Name = "CategoryNamesFieldName")]
public IDictionary<string, string> Names { get; set; }
}
属性:
public class ItemMaxLengthAttribute : ValidationAttribute
{
private readonly int _maxLength = int.MaxValue;
public ItemMaxLengthAttribute(int maxLength)
{
_maxLength = maxLength;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
...
// I can get instance and it's type from validation context
var instance = validationContext.ObjectInstance; // which is instance of ModelClass
var instanceType = validationContext.ObjectType; //which is typeof(ModelClass)
var dispayName = validationContext.DisplayName; //which is value of Display attribute
...
}
}
所以主要的想法是(我也不喜欢它)通过它的 DysplayName
属性值 (dispayName
) 来验证当前属性。我一直卡在这里。也许有其他方法可以获取正在验证的属性的属性信息吗?
P.S. 我已经尝试过 MemberName
属性,就像Alexandre Rondeau建议的那样,但问题是 validationContext.MemberName = null
,所以无法使用。此外,MSDN说,此属性表示实体成员名称,而不是相应数据字段的名称,而我需要相应数据字段的名称。
validationContext.MemberName
为空。所以我有一些麻烦来获取_Names_。 - Dmytro