3

DataAnnotationsModelValidatorProviderによって検証されてはならないタイプ「コンテンツ」(カスタムCMSから)があります。他のすべてのタイプで必要になるため、プロバイダーからDataAnnotationsModelValidatorProviderを削除したくありません。

DataAnnotationsModelValidatorProviderから継承したカスタムModelValidatorProviderを作成し、唯一のパブリックエントリポイント(メソッドGetValidators)でcontainerTypeが "Content"タイプであるかどうかを確認し、空のバリデーターのコレクションを返し、別のカスタムModelValidatorProviderにこの検証を処理させることを考えました。特定のタイプ。しかし、Microsoftの私の友人は、DataAnnotationsModelValidatorProviderの基本クラスであるAssociatedValidatorProviderでこのメソッドを封印することにしました。

特定のタイプのDataAnnotationsModelValidatorProviderをスキップする他の方法はありますか?

そうでない場合は、ここで私の提案に投票できますか:http: //aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3571625-remove-sealed-on-method-getvalidators-of-type- asso

これは、同様の問題に直面している他の誰かからの議論です: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 に答える