Ok。私はこれを見て、私の方法が無駄であることに気づきました。
これはどのように見えますか?
ExtendedValidationRequiredという注釈を作成しました。
拡張値の条件付きチェックをオンにするかどうかを決める静的な値があります。
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class ExtendedValidationRequiredAttribute : RequiredAttribute
{
// Summary:
// Initializes a new instance of the System.ComponentModel.DataAnnotations.RequiredAttribute
// class.
public ExtendedValidationRequiredAttribute()
{
}
// Summary:
// Checks that the value of the required data field is not empty.
//
// Parameters:
// value:
// The data field value to validate.
//
// Returns:
// true if validation is successful; otherwise, false.
//
// Exceptions:
// System.ComponentModel.DataAnnotations.ValidationException:
// The data field value was null.
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (ExtendedValidation.IsExtendedValidationEnabled(validationContext.ObjectType))
{
return base.IsValid(value,validationContext);
}
else
{
return ValidationResult.Success;
}
}
}
次に、[ExtendedValidationRequired(typeof(MyClassName))]を使用して、時々必要な(たとえば、そのクラスを直接編集する場合)フィールドをマークアップします。
これは、他のタイプのバリデーターでも機能します。
私は実際に先に進み、「Sometimes On」バリデーターのセットを作成し、設定を別のクラスに移動しました。public static class ExtendedValidation {private static Dictionary extendedValidationExemptions = new Dictionary();
/// <summary>
/// Disable extended validation for a specific type
/// </summary>
/// <param name="type"></param>
public static void DisableExtendedValidation(Type type)
{
extendedValidationExemptions[type] = true;
}
/// <summary>
/// Clear any EV exemptions
/// </summary>
public static void Reset()
{
extendedValidationExemptions.Clear();
}
/// <summary>
/// Check if a class should perform extended validation
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static bool IsExtendedValidationEnabled(Type type)
{
if (extendedValidationExemptions.ContainsKey(type))
{
return false;
}
else
{
return true;
}
}
}
}
子を編集するときにExtendedValidationをオフにするだけです。
EG:子を編集するとき、DisableExtendedValidation(typeof(Parent))を使用でき、邪魔になりません。
編集:うーん、これはうまくいかないことに気づきました。--validationProperty内で見ているクラスを特定できますか?私はいつでも親プロパティを渡すことができると思いますが、それはPITAです