@JotaBe が提供した回答に基づいて、Model プロパティ自体でカスタム検証属性を使用できます。このようなもの :
条件付き必須属性
public class ConditionalRequiredAttribute : ValidationAttribute
{
private const string DefaultErrorMessageFormatString
= "The {0} field is required.";
private readonly string _dependentPropertyName;
public ConditionalRequiredAttribute(string dependentPropertyName)
{
_dependentPropertyName = dependentPropertyName;
ErrorMessage = DefaultErrorMessageFormatString;
}
protected override ValidationResult IsValid(
object item,
ValidationContext validationContext)
{
var property = validationContext
.ObjectInstance.GetType()
.GetProperty(_dependentPropertyName);
var dependentPropertyValue =
property
.GetValue(validationContext.ObjectInstance, null);
int value;
if (dependentPropertyValue is bool
&& (bool)dependentPropertyValue)
{
/* Put the validations that you need here */
if (item == null)
{
return new ValidationResult(
string.Format(ErrorMessageString,
validationContext.DisplayName));
}
}
return ValidationResult.Success;
}
}
属性の適用
ここにクラス Movie があり、サーバーから設定できる RatingIsRequired ブール値プロパティの値に応じて評価が必要です。
public class Movie
{
public bool RatingIsRequired { get; set; }
[ConditionallyRequired("RatingIsRequired"]
public string Rating { get; set; }
}
- これにより、true に設定されて いて空の
ModelState.IsValid
場合、false が返されます。RatingIsRequired
Rating
[Required]
また、通常の属性のように機能するように、クライアント対応の検証用に目立たないカスタム jquery バリデーターを作成することもできます。
これが役立つかどうか教えてください。