私はValidator.TryValidateObject()
を使用してデータ注釈を使用するオブジェクトを検証しています。オブジェクトが無効な場合、コードは正常に実行されます。ただし、有効な場合は、スタックオーバーフローエラーが生成されます。オブジェクトが有効な場合、TryValidateObjectを使用したStackOverflow
public virtual IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
vc = new ValidationContext(this, null, null);
List<ValidationResult> a = new List<ValidationResult>();
Validator.TryValidateObject(this, vc, a,true);
foreach (var item in a)
yield return item;
if (Name == "Arbitary")
yield return new ValidationResult("Bad Name.", new[] { "Name" });
}
TryValidateObject
が内部でも、私の方法Validate
を呼び出しているようだ:
は、ここに私の方法です。この方法で
私の目標は、私のオブジェクトのすべてのDataAnnotationsを検証して、その後いくつかの複雑な検証ロジックに追加することです - ので、私はTryValidateObject
はその後、その後、私は私自身の検証ロジックを置くことができ、データの注釈をチェックすると仮定しました。
DataAnnotationsから生成されたValidationResultsをレポートし、名前が "Arbitary"の場合はValidationResultを追加しますが、データが有効な場合はこのstackoverflowを取得します。
アイデア?独自のValidate
メソッドが呼び出されないように、オブジェクトのデータアノテーションを検証するにはどうすればよいですか?あるいは、このスタックオーバーフローを解決する方法は?
私のクラスはIValidatableObject
インターフェイスを実装していることに注意してください。
おかげで、私はこれを行うかもしれないが、私は私のオブジェクトがそれを保存しようとする前に、データベースに受け入れられるかどうかを考え出すことができるようにしたい:(Model.Validate()であれば、 'のようなものを。 Count()== 0){Database.Save(Model);} '。現時点では、私はデータベースに 'Save()'しようとすると例外を 'キャッチする'必要があります。これはひどく非効率です。 – Oliver
このアプローチを採用した場合でも、送信前にValidator.TryValidateObjectを手動で呼び出して確認できます。 – DaveRead