今では、優れたFluentValidation ライブラリを使用して、モデル クラスを検証しています。Web アプリケーションでは、jquery.validateプラグインと組み合わせて使用し、クライアント側の検証も実行します。欠点の 1 つは、検証ロジックの多くがクライアント側で繰り返され、1 か所に集中していないことです。
このため、私は代替手段を探しています。モデルの検証を実行するためのデータ注釈の使用を示す多くの例があります。それは非常に有望に見えます。私が見つけられなかったのは、別のプロパティ値に依存するプロパティを検証する方法です。
たとえば、次のモデルを見てみましょう。
public class Event
{
[Required]
public DateTime? StartDate { get; set; }
[Required]
public DateTime? EndDate { get; set; }
}
EndDate
が より大きいことを確認したいと思いStartDate
ます。カスタム検証ロジックを実行するために、ValidationAttributeを拡張するカスタム検証属性を作成できます。残念ながら、モデル インスタンスを取得する方法が見つかりませんでした。
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// value represents the property value on which this attribute is applied
// but how to obtain the object instance to which this property belongs?
return true;
}
}
検証中のオブジェクト インスタンスを含むこのプロパティがあるため、 CustomValidationAttributeが機能しているように見えることがわかりました。ValidationContext
残念ながら、この属性は .NET 4.0 でのみ追加されました。私の質問は、.NET 3.5 SP1 で同じ機能を実現できますか?
アップデート:
FluentValidationは、ASP.NET MVC 2 でクライアント側の検証とメタデータを既にサポートしているようです。
それでも、データ注釈を使用して依存プロパティを検証できるかどうかを知っておくとよいでしょう。