xVal в MVC.NET с nHibernate.validator не запускает проверку клиента
У меня есть ASP.NET MVC Project, работающий с NHibernate и NHibernate.Validator, и я хотел бы использовать xVal 1.0 (самый последний выпуск). Я добавил запрошенные скрипты в проект и сослался на него в Site.Master:
<script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery-1.3.2.js")%>"></script>
<script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery.validate.js")%>"></script>
<script type="text/javascript" src="<%= ResolveUrl("~/Scripts/xVal.jquery.validate.js")%>"></script>
Затем я добавил NHibernateValidatorRulesProvider в xVal.ActiveRuleProviders в Global.asax Application_OnStart():
xVal.ActiveRuleProviders.Providers.Add(new NHibernateValidatorRulesProvider(ValidatorMode.OverrideXmlWithAttribute));
Наконец, в представлении я добавил:
<%= Html.ClientSideValidation<DomainModel.Entities.MyCustomClass>(Prefix) %>
Я получаю предупреждение JavaScript в IE, но не в Firefox. Если ввести сейчас несколько недопустимых полей и отправить их, xVal не сработает - вместо этого создается PostBack, а проверка на стороне сервера обрабатывает данные.
Что я делаю неправильно? Мне удалось сделать пример проекта xVal, работающего с xVal 1.0...
// edit: я должен уточнить свое утверждение: что-то на самом деле происходит: он выполняет постбэк и помечает недопустимые поля красным (как это происходит все время с проверкой на стороне сервера), но если я что-то записываю в эти поля цвет меняется обратно в нормальное состояние. но если я затем снова удаляю значение, ничего не происходит до тех пор, пока я не нажму "Отправить", и форма не выполнит другую обратную передачу... Если я удаляю код проверки клиента, этого не происходит.
2 ответа
Убедитесь, что ваш валидатор не допускает нулевые значения, MVC проверяет формы по пустым полям в обратной передаче, но xVal может сделать это не в каждом случае.
Решено: Я использовал [Длина (1,50)]- валидатор для текстовых полей, чтобы убедиться, что они содержат значение. Но очевидно, что xVal не обрабатывает этот Validator как исключение: xVal разрешает обратную передачу, даже если поля пусты. Чтобы убедиться, что xVal проверяет, является ли поле пустым, мне пришлось выбрать атрибут [NotEmpty()]!