少なくとも 2 つの項目が選択されていることを確認するバリデーターを作成しようとしています。バリデータはサーバー側で正しく動作しますが、クライアント側のコードは実行されません。
コードは次のとおりです。
Sys.Mvc.ValidatorRegistry.validators["country"] = function (rule) {
var min = rule.ValidationParameters["min"];
return function (value, context) {
if (value >= min) return true;
return rule.ErrorMessage;
};
};
そして、ここにバリデータコードがあります:
public class CountryValidator : DataAnnotationsModelValidator<CustomValidations.CountryAttribute>
{
private int _minimum;
private string _message;
public CountryValidator(ModelMetadata metadata, ControllerContext context, CustomValidations.CountryAttribute attribute) : base(metadata,context,attribute)
{
_minimum = attribute.Minimum;
_message = attribute.ErrorMessage;
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
var rule = new ModelClientValidationRule()
{
ErrorMessage = _message,
ValidationType = "country"
};
rule.ValidationParameters.Add("min", _minimum);
return new[] { rule };
}
}
global.asax ファイルに検証アダプターを登録しました。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(AgeAttribute), typeof(AgeValidator));
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CountryAttribute),typeof(CountryValidator));
}
バリデーターは、テキストボックスなどの値プロパティを持つ要素でのみ機能すると考えています。
更新 1:
EnableClientValidation が正しく呼び出され、必要なすべての JS ファイルがプロジェクトに含まれています。onblur をコンテキストにアタッチする必要があるようです。私はそれを試して、結果を投稿します。