1

我正在尝试使用 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 字段。”

这是为什么?

4

0 回答 0