У меня есть главная страница, которая содержит элемент управления Login, чтобы пользователь мог войти в систему/выйти из любой страницы. Однако для нескольких страниц контента требуется элемент управления Recaptcha. Это вызывает проблемы, потому что, когда я пытаюсь войти на страницу с элементом Recaptcha, система ожидает, что я войду в слова. Я знаю об отсутствии групп проверки в элементе управления Recaptcha и о том, что на странице ASP.NET не может быть нескольких форм. Есть ли способ обойти это? «Яркий» способ, о котором я могу думать, находится в событии «Вход», проверьте страницу для элемента управления Recaptcha. Если он существует, отключите его, иначе продолжите. Тем не менее, это выглядит довольно неэффективно, особенно когда есть несколько страниц, и у большинства из них не будет управления Recaptcha.Recaptcha запускается из управления главной страницы
ответ
Обойти эту проблему следующим образом:
- Установить ValidationGroup на кнопку Login. Элемент управления reCAPTCHA не будет проверяться при нажатии кнопки с ValidationGroup, установленной на непустую.
- На страницах, для которых требуется подтверждение валидации, держите значение ValidationGroup в кнопке непустым (в противном случае также будут проверены поля входа в систему), но вызовите RecaptchaControl.Validate() вручную в подпрограмме.
Что вы должны сделать, это следующее:
<form runat="server"></form>
должны быть обернуты вокруг всего содержания страницы, в вашем случае на главной странице, так как там Войти, как хорошо.
С этого момента вы можете просто удалить элемент recaptcha на любой странице, которая происходит на данной главной странице. Вам не нужен еще один тег <form runat="server"></form>
.
Вы должны понимать, что элемент управления recaptcha не связан с формой html submit и ни одной конкретной конкретной кнопкой. Каждый раз, когда страница отправляет обратно, recaptcha устанавливает флаг Page.IsValid
.
К сожалению, recaptcha не соответствует стандартам ASP.NET, используя инициированную проверку в сочетании с группами проверки.
Так, чтобы предотвратить повторную проверку каждый раз, вы должны установить: SkipRecaptcha = true
Это заставляет recaptcha не проверять. Итак, теперь рассмотрен сценарий входа в систему. Если вы действительно хотите использовать функциональность recaptcha, вы просто установите SkipRecaptcha = false
и позвоните по телефону Page.Validate()
. Впоследствии вы можете продолжить работу с Page.IsValid
.
Более чистым и лучшим подходом было бы переписать элемент управления recaptcha, чтобы использовать класс BaseValidator
. Это позволит вам указать группу проверки на элемент управления recaptcha и кнопку, которая отправляет входные данные, которые вы хотите защитить с помощью recaptcha. При нажатии кнопки происходит только проверка правильности указанной группы проверки.
Кроме того, вам необходимо указать группу проверки для кнопки входа или установить CausesValidation = false
. Если группа проверки не установлена и кнопка будет нажата, все группы проверки будут проверены автоматически.
Это, однако, довольно продвинуто, так что даже ребята recaptcha отказались от него, однако в исходном контроле все еще есть старая версия. Нет гарантии, что эта версия все еще работает. Дайте нам знать, как вы решили.
Класс BaseValidator получен из элемента управления Label, которого нет в reCAPTCHA. –
Я никогда не говорил, что это было бы, мой первый подход заключался бы в создании составного элемента управления со всеми элементами управления, необходимыми для работы recaptcha, и просто добавлением дополнительного элемента управления, который обрабатывает валидацию и упрощает реализацию, вытекает из класса BaseValidatior (и btw. ** старая версия, фактически полученная из BaseValidator **) – ntziolis
Способ рендеринга reCAPTCHA не оправдывает наличие дочерних элементов управления (он состоит из одного тега
- 1. Обновление главной страницы из пользовательского элемента управления
- 2. поиск главной страницы с другой главной страницы?
- 3. Кнопка главной страницы запускает элементы управления проверкой
- 4. Как редактировать элементы управления внутри главной страницы?
- 5. Программная настройка главной страницы главной страницы
- 6. Поиск элементов управления событиями загрузки страницы, наследуемой с главной страницы
- 7. Обновление главной страницы из окна
- 8. Настройка главной страницы SharePoint
- 9. Неправильная загрузка главной страницы
- 10. не может решить стиль с главной страницы главной страницы
- 11. Доступ управления на странице с главной страницы из пользовательского элемента управления
- 12. как добавить событие к элементу управления Telerik с главной страницы
- 13. вызова UserControl с главной страницы
- 14. Практическое руководство. Добавление динамически HiddenField на главной странице главной страницы
- 15. Концепция главной страницы в Html5?
- 16. SetContentView для главной страницы
- 17. Как получить доступ к управляющему идентификатору страницы управления пользователями из функции javascript главной страницы?
- 18. Сброс настроек главной страницы
- 19. Установка главной страницы
- 20. Как связать вложенный элемент управления с кодом главной страницы позади
- 21. Вызов обработчика события в пользовательском элементе управления с главной страницы
- 22. не в состоянии получить доступ управления главной страницы
- 23. Кентико: Добавление пользовательских элементов управления в заголовок главной страницы
- 24. Элементы управления гиперссылкой главной страницы ASP.NET не работают
- 25. распечатать страницу в asp.net без элементов управления главной страницы
- 26. Обработка панелей главной страницы с базовым классом управления
- 27. Не удается найти элемент управления на главной странице страницы
- 28. Пропустить событие с главной страницы на элемент управления пользователями
- 29. Цитирование через элементы управления на странице с использованием главной страницы
- 30. Вызов функции главной страницы из iFrame?
Неправильное использование. К сожалению, recaptcha не соответствует шаблону asp.net. Контроллер recaptcha не заботится о группах валидации. Свойство IsValid оценивается каждый раз. Внутри этого метода выполняются только следующие проверки: 'if (Page.IsPostBack && Visible && Enabled &&! This.skipRecaptcha)' Таким образом, единственный способ (в данном случае) - сохранить recaptcha от проверки, кроме того, чтобы отключить или скрыть его , устанавливая свойство 'SkipRecaptcha' равным true. – ntziolis
Я стою исправлено. Код на стороне сервера не работает с описанным выше решением, но код на стороне клиента. Я исправил исправление для репозитория, чтобы исправить эту проблему. Для иллюстрации использования также есть тестовая страница (test/ValidationGroup.aspx). –
Thats great! Я попробую это очень скоро, thx для исправления. – ntziolis