0

少なくとも 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 をコンテキストにアタッチする必要があるようです。私はそれを試して、結果を投稿します。

4

3 に答える 3

0

<% =Html.EnableClientValidation(); %>どこかであなたの視界に入る必要があります。また、同じビューで (js 関数の前に) MicrosoftAjax.jsandを参照していることを確認してください。MicrosoftMvcValidation.js

于 2010-07-27T19:26:46.630 に答える
0

MicrosoftMvcAjax.jsHaack 氏の Web サイトhttp://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspxで説明されているように、欠落しているか、jQuery でカスタム検証を実装する必要があります。

于 2010-07-28T05:50:52.303 に答える
0

入力テキストボックスの onblur イベントでデフォルトの検証が呼び出されるためだと思います。リストボックスの場合、このイベントはスローされませんでした。

于 2010-07-29T15:38:59.263 に答える