Asp.net mvc 绕过asp.net mvc中特定类型的DataAnnotationsModelValidatorProvider

Asp.net mvc 绕过asp.net mvc中特定类型的DataAnnotationsModelValidatorProvider,asp.net-mvc,validation,Asp.net Mvc,Validation,我有一个类型“Content”(来自自定义CMS),必须由DataAnnotationsModelValidatorProvider验证。我不想从提供程序中删除DataAnnotationsModelValidatorProvider,因为我需要它用于所有其他类型 我考虑创建一个自定义ModelValidatorProvider,它继承自DataAnnotationsModelValidatorProvider,并在唯一的公共入口点(方法GetValidators)中检查containerTyp

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

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

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

如果没有,你能在这里投票支持我的建议吗


这是另一个面临类似问题的人的讨论:

难道您不能直接从
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);
    }
}
公共类CustomValidatorProvider:ModelValidatorProvider
{
私有只读DataAnnotationsModelValidatorProvider _provider=新DataAnnotationsModelValidatorProvider();
公共重写IEnumerable GetValidator(ModelMetadata元数据、ControllerContext上下文)
{
if(metadata.ModelType==typeof(Content)| | metadata.ContainerType==typeof(Content))
{
返回可枚举的.Empty();
}
return\u provider.GetValidators(元数据、上下文);
}
}

如果您不想验证您的类型
内容
则不要使用该类型。而不是创建一个新类型
ContentViewModel
您可以在mvc视图和操作中使用什么,而无需任何验证。当然你需要处理
Content
ContentViewModel
之间的映射,但是有像AutoMapper这样的工具可以帮助你实现这一点。这种类型是我正在构建的CMS的中心,我已经构建了一个完整的ModelMetatadataProvider,这样就可以用@Html.EditorForModel()呈现表单了。。。如果我能用另一种类型,我不会问这个问题。我知道AutoMapper是什么…有趣的是,我曾经尝试过类似的方法,但在尝试调用DataAnnotationsModelValidatorProvider的GetValidators方法时迷失了方向。由于某些原因,我无法解释,我试图用IEnumerable属性调用重载的一个,而我显然没有。。。现在它正在工作。我只需要测试它是否破坏了DataAnnotationsModelValidatorProvider的行为。谢谢