1

モデルに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にいくつかの問題がありました。

4

2 に答える 2

2

ModelValidatorProviderエンタープライズライブラリ検証用を作成できます。Brad Wilsonには、これを行う方法を説明するブログ投稿があります。

ただし、これはサーバー側の検証のみを実行するようです。使用している属性がDataAnnotationsと非常に似ている場合は、代わりにそれらを使用することをお勧めします。

于 2012-09-14T12:20:28.267 に答える
1

これが機能しない理由は、VABがからではなく、から直接RegexValidatorAttribute継承するためです。このため、MVCはそれを処理する方法を知りません。System.ComponentModel.DataAnnotations.RegularExpressionAttributeValidationAttribute

MVCがこの処理を行う方法を変更する方法はありますが、その方法がわかりません。しかし、の使用法RegexValidatorAttributeをDataAnnotationsに置き換えてみませんRegularExpressionAttributeか?検証アプリケーションブロック5はDataAnnotationsの属性を処理できるため、DataAnnotations属性が機能している場合は、それらを使用するだけです。

于 2012-09-14T12:11:05.060 に答える