xVal в MVC.NET с nHibernate.validator не запускает проверку клиента - PullRequest
4 голосов
/ 22 сентября 2009

У меня есть проект ASP.NET MVC, работающий с 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 ]

2 голосов
/ 22 сентября 2009

Убедитесь, что ваш валидатор не допускает пустых значений, MVC проверяет формы по пустым полям в обратной передаче, но xVal может делать это не в каждом случае.

2 голосов
/ 22 сентября 2009

РЕШИТЬ: Я использовал [Длина (1,50)] - Валидатор для TextFields, чтобы убедиться, что они содержат значение. Но очевидно, что xVal не обрабатывает этот валидатор как исключение: xVal разрешает обратную передачу, даже если поля пусты. Чтобы убедиться, что xVal проверяет, является ли поле пустым, мне пришлось выбрать атрибут [NotEmpty ()] !

...