Проверка пользовательского клиента ASP.NET MVC 2.0 - PullRequest
0 голосов
/ 27 июля 2010

Я пытаюсь создать валидатор, который будет гарантировать, что выбраны как минимум 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));
        }

Я думаю, что валидатор работает только с элементами, имеющими свойство value, такими как текстовые поля и т.д.

ОБНОВЛЕНИЕ 1:

EnableClientValidation вызывается правильно, и все необходимые файлы JS включены в проект. Кажется, мне нужно прикрепить onblur к контексту. Я попробую это и опубликую результаты.

Ответы [ 3 ]

0 голосов
/ 28 июля 2010

Либо вы пропустили MicrosoftMvcAjax.js, либо вам нужно реализовать свою пользовательскую проверку в jQuery, как описано на сайте мистера Хаака http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx.

0 голосов
/ 29 июля 2010

Я думаю, это потому, что проверка по умолчанию вызывается для события onblur входного текстового поля.И для списка это событие не было выброшено.

0 голосов
/ 27 июля 2010

<% =Html.EnableClientValidation(); %> должен быть где-то на ваш взгляд.Также убедитесь, что вы ссылаетесь на MicrosoftAjax.js и MicrosoftMvcValidation.js в том же виде (перед вашей функцией js).

...