カスタムデータアノテーション検証を作成したい。作成方法に関する有用なガイド/サンプルはありますか?
まず:
最小長と最大長のStringLength。私は.NET 4がこれを行うことができることを知っていますが、可能であれば最小長のみ(少なくともx文字)、最大長のみ(最大x文字)、またはその両方を定義できる場合、.NET 3.5でも同じことをしたいです(x文字とy文字の間)。
第二に:
モジュラス演算を使用した検証-数値が有効な長さである場合、Modulus 11アルゴリズムを使用して検証したい(JavaScriptで既に実装しているので、単純なポーティングになると思いますか?)
更新:
2番目の問題は、JavaScript実装をコピーしていくつかの微調整を行っただけの問題であるため、解決策は必要ありません。
カスタムデータアノテーションバリデータを作成するには、次のガイドラインに従ってください。
System.ComponentModel.DataAnnotations.ValidationAttribute
_クラスから継承する必要があります。bool IsValid(object value)
メソッドをオーバーライドし、その内部に検証ロジックを実装します。それでおしまい。
開発者は、値がnull /空でないことを確認し、falseを返すことがあります。これは通常不正な動作です。これはRequired
バリデーターにあるため、カスタムバリデーターはnull以外のデータのみを検証する必要がありますが、それ以外の場合はtrue
を返します(例を参照)。これにより、必須(必須)および非必須フィールドで使用可能になります。
_public class StringLengthRangeAttribute : ValidationAttribute
{
public int Minimum { get; set; }
public int Maximum { get; set; }
public StringLengthRangeAttribute()
{
this.Minimum = 0;
this.Maximum = int.MaxValue;
}
public override bool IsValid(object value)
{
string strValue = value as string;
if (!string.IsNullOrEmpty(strValue))
{
int len = strValue.Length;
return len >= this.Minimum && len <= this.Maximum;
}
return true;
}
}
_
すべてのプロパティは、設定する属性に設定できます。
いくつかの例:
_[Required]
[StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")]
[StringLengthRange(Maximum = 20)]
[Required]
[StringLengthRange(Minimum = 10, Maximum = 20)]
_
特定のプロパティが設定されていない場合、その値はコンストラクターで設定されるため、常に値を持ちます。上記の使用例では、Required
バリデーターも意図的に追加したため、上記と同期していますcaution私は書きました。
そのため、このバリデーターは必要ではないモデル値で動作しますが、存在する場合は検証します(Webフォームのテキストフィールドは必須ではありませんが、ユーザーが値を入力する場合は有効である必要があります) 。
CustomValidationAttribute
を署名付きの検証関数とともに使用します
public static ValidationResult Validate(MyType x, ValidationContext context)
例(文字列プロパティの場合)
using System.ComponentModel.DataAnnotations;
public class MyClass
{
[CustomValidation(typeof(MyClass), "Validate")]
public string MyProperty { get; set; }
public static ValidationResult Validate(string x, ValidationContext context)
{
return (x == "valid")
? new ValidationResult(null)
: ValidationResult.Success;
}
}