问题描述
有问题的表单是带有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,这就是问题所在!