Как использовать @ReCaptcha с Ajax Form в MVC3? - PullRequest
3 голосов
/ 25 апреля 2011

Я пытаюсь использовать ReCaptcha из Microsoft.Web.Helpers. Если я загружаю всю страницу, она отображается правильно, но если я загружаю страницу с помощью запроса ajax, она исчезает.

Пример (/ home / index)

<div id="bla">
    @Ajax.ActionLink("reload with ajax", "index", new AjaxOptions() { UpdateTargetId = "bla" })

    @ReCaptcha.GetHtml(publicKey: "xxx")
</div>

Если я введу /home/index, появится капча. Если я нажму кнопку reload with ajax, то ReCaptcha исчезнет ...

recaptcha

  1. Страница загружается впервые
  2. reload with ajax содержимое страницы меняется на /home/index, другими словами, вся страница перезагружается асинхронно и капча пропадает

Есть ли способ исправить это или приличный помощник капчи для MVC 3?

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

Я заменил помощника на javascript. Сценарий ReCaptcha

<div id="captcha"></div>

<input type="submit" value="Send" />

<script type="text/javascript">
Recaptcha.destroy();
Recaptcha.create("publicKey", "captcha", {});
</script>

И контроллер все тот же

if (ReCaptcha.Validate("privateKey"))
{
}

Поэтому, когда он частично загружает представление, он выполняет эти сценарии и каждый раз корректно отображается.

Спасибо за помощь @Bala R

3 голосов
/ 16 августа 2012

Я столкнулся с той же проблемой, и самое быстрое решение, которое я нашел, - это использовать то, что предложено выше, и добавить к нему эту часть кода в верхней части вашей страницы в обработчике «EndRequestHandler», предложенном .net javascript api (http://msdn.microsoft.com/en-us/library/bb311028(v=vs.100)).

С этим решением всегда работает проверка бэкэнда.

Вот код, который я использовал:

<script type="text/javascript" language="javascript">
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
  function EndRequestHandler(sender, args) {
            if (Recaptcha != null) {
                     Recaptcha.destroy();
                     Recaptcha.create("public_key", "captcha", {});
                  }
              }
</script>

Я надеюсь, что это может кому-то помочь ...

...