モデルにEnterpriseLibrary5 Validation(WCFメソッドでも使用されています)を既に使用しているため、DataAnnotationsを使用したASP.NET4MVCの冗長なバリデーターを避けたいと思いました。
しかし、エンタープライズライブラリバリデーターはMVCによって自動的に取得されないようです。
MVC DataAnnotationsを使用する場合:
[RegularExpression(MyValidationExpressions.Email, ErrorMessage = MyValidationMessages.InvalidEmailMessage)]
public virtual string Email { get; set; }
HTMLにはdata-val-regex-patternが含まれており、フィールドはクライアント側で検証されています。
しかし、既存のELベースの検証を使用する場合:
[RegexValidator(MyValidationExpressions.Email, MessageTemplate = MyValidationMessages.EmptyFieldMessage))]
public virtual string Email { get; set; }
クライアント側では検証エラーは表示されず、生成されたHTMLには検証属性がありません。
ここで何が欠けていますか?MVCにクライアント側とサーバー側の両方で既存のELバリデーターを使用させるにはどうすればよいですか?
解決策:
DataAnnotationsに完全に移行するソリューションを受け入れました。これは最も簡単な方法であり、EntLib5とMVC4の両方で正常に機能します。ただし、ValidationFactoryには少し問題があります。CreateValidatorFromAttributesをCreateValidatorと特定のフラグに置き換える必要がありました。DataAnnotationsがValidationFactoryとどのように連携するかについては、次の記事を参照してください。
CreateValidatorFromAttributesはDataAnnotations属性を使用しません
また、DataAnnotationsには[Required]属性があり、空の文字列とスペースのみを含む文字列を適切に処理します。それでVABにいくつかの問題がありました。