grecaptcha.execute之后,form.submit在ASP.Net MVC 5表单上不起作用

问题描述

有问题的表单是带有reCaptcha v2的简单表单。单击提交按钮后,Google会用reCaptcha向用户(我)发起挑战。每次Google验证我是人时,都会调用onSubmit,该表单会正确序列化,但是form.submit()不会在服务器上调用ASP.Net MVC控制器。删除Google reCaptcha后,就可以正常使用该控制器了,因此我认为这与ASP.Net代码无关。

JavaScript不是我的强项,因此我在尝试调用提交时犯了一个愚蠢的错误。我这是怎么了?

    <script>
        var onSubmit = function (token) {
            var form = $("form"); // $("#FeedbackForm");
            console.log(form.serialize());
            form.submit();
        }

        var onGrecaptchaError = function (token) {
            grecaptcha.reset();
        }

        var onloadCallback = function() {
            grecaptcha.render('submit',{
                'sitekey' : '@reCaptchaPublic','callback': onSubmit,'error-callback': onGrecaptchaError,'size': 'invisible'
            });
        };
    </script>

    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>

和剃刀的形式代码

@using (Html.BeginForm("Email","Home",FormMethod.Post,new { id = "FeedbackForm" }))
{
    @* [SNIP] *@
    <div class="formfield clear">
        <button id="submit" class="btnSubmit">Send To leadership</button>
    </div>
}

解决方法

经过大量搜索后,我终于发现您不能为提交按钮提供一个提交ID,这就是问题所在!