2011-04-25 84 views
3

我正在尝试使用Microsoft.Web.Helpers的ReCaptcha。如果我加载整个页面它正确呈现,但如果我加载页面的ajax请求它会消失。如何在MVC3中使用带有Ajax Form的@ReCaptcha?

实施例(/家/索引)

<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体面的验证码帮手?

+0

看看这篇文章帮助http://stackoverflow.com/q/2524847/273200 – 2011-04-25 19:39:23

+0

@Bala是的,这项工作解决了问题 – BrunoLM 2011-04-26 12:40:23

+0

只是发布你必须做的答案,如果你认为它会帮助别人。 – 2011-04-26 12:49:54

回答

4

我用javascript代替了帮手。 ReCaptcha script

​​

和控制器仍然是相同的

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

所以当它加载视图部分就执行这个脚本,每一次正确呈现。

感谢您的帮助@Bala [R

3

我面临着同样的问题,最快的解决办法,我发现用它上面提出和处理程序中添加到它的这部分代码在你的页面的顶部由.net javascript api(http://msdn.microsoft.com/en-us/library/bb311028(v=vs.100)提出的“EndRequestHandler”)。

使用此解决方案,后端验证始终有效。

这里是我使用的代码:

<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> 

我希望这能帮助别人......