我正在尝试使用 DataAnnotationsModelMetadataProvider 用一个自定义替换几个数据注释属性
所以我创建了一个假属性:
public class TestAttribute : ValidationAttribute
{
}
并用这个属性装饰我的模型属性。
并使用 DataAnnotationsModelMetadataProvider 根据是否设置了 TestAttribute 添加其他几个属性:
public class MyCustomMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var attributeList = attributes.ToList();
if (attributeList.OfType<TestAttribute>().Any())
{
var req = new RequiredAttribute();
attributeList.Add(req);
}
return base.CreateMetadata(attributeList, containerType, modelAccessor, modelType, propertyName);
}
}
这行得通。现在需要具有 test 属性的属性。
不起作用的是在 RequiredAttribute 对象上设置属性。像这样:
var attributeList = attributes.ToList();
if (attributeList.OfType<CurrencyAttribute>().Any())
{
var req = new RequiredAttribute();
req.ErrorMessage = "Test test";
attributeList.Add(req);
}
错误消息仍将是:“需要 xx 字段。”
这是为什么?