初めて独自の検証スクリプトを作成しようとしています。私はいくつかのチュートリアルに従いましたが、それらが機能するようになり、その背後にあるロジックをゼロから理解しようとしています。これは私のカスタムです:
属性:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class DateGreaterThanTodayAttribute: ValidationAttribute, IClientValidatable
{
public DateGreaterThanTodayAttribute(): base("{0} must be greater than today")
{
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
var valueAsDate = (DateTime)value;
if (valueAsDate < DateTime.Now)
{
var errorMessage = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(errorMessage);
}
}
return ValidationResult.Success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
rule.ValidationType = "dategreaterthantoday";
rule.ValidationParameters.Add("today", DateTime.Now);
yield return rule;
}
}
}
JS:
$.validator.addMethod("dategreaterthantoday", function (value, element, params) {
if (value) {
var valueAsDate = Date.parse(value);
if (valueAsDate < Date.now)
return false;
}
return true;
});
$.validator.unobtrusive.adapters.addBool("dategreaterthantoday")
サーバー側の検証は正常に機能しますが、クライアント側のコードで渡す必要があるパラメーターについてはまだ少し混乱しています。誰かがクライアント側の検証が機能しない理由を理解するのを手伝ってくれるなら、私はただ探しているわけではありません単純な解決策ですが、私が間違っていることとその修正方法の説明です。
前もって感謝します!