3

我有一个不能由 DataAnnotationsModelValidatorProvider 验证的类型“内容”(来自自定义 CMS)。我不想从提供程序中删除 DataAnnotationsModelValidatorProvider,因为我需要它用于所有其他类型。

我想创建一个从 DataAnnotationsModelValidatorProvider 继承的自定义 ModelValidatorProvider,并在唯一的公共入口点(方法 GetValidators)中检查 containerType 是否为“Content”类型,然后返回一个空的验证器集合并让另一个自定义 ModelValidatorProvider 处理此验证具体类型。但是我在微软的朋友决定把这个方法封装在DataAnnotationsModelValidatorProvider的基类AssociatedValidatorProvider中。

您是否看到任何其他跳过特定类型的 DataAnnotationsModelValidatorProvider 的方法?

如果没有,您能否在这里投票支持我的建议:http: //aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3571625-remove-sealed-on-method-getvalidators-of-type-阿索

这是其他人面临类似问题的讨论:http ://forums.asp.net/t/1751517.aspx/1

4

1 回答 1

7

你不能直接继承自ModelValidatorProvider吗?然后,您可以根据需要进行修改GetValidators。例如:

public class CustomValidatorProvider : ModelValidatorProvider
{
    private readonly DataAnnotationsModelValidatorProvider _provider = new DataAnnotationsModelValidatorProvider();

    public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
    {
        if (metadata.ModelType == typeof(Content) || metadata.ContainerType == typeof(Content))
        {
            return Enumerable.Empty<ModelValidator>();
        }

        return _provider.GetValidators(metadata, context);
    }
}
于 2013-01-20T21:38:56.877 回答