我是带有实体框架的Asp.Net Mvc4的新用户。现在我正在为验证码验证“忘记密码”。作为我的代码,当我单击提交按钮时,即使验证码无效,我也会将电子邮件ID值传递给Controller。如果验证码正确,我想将电子邮件ID值传递给控制器​​,否则它将显示验证错误,并且应重新加载新的验证码。请帮助我修复它。提前致谢。

这是我的Java脚本代码,用于生成和验证验证码:

var captchastring = '';
        function getCaptcha() {
            var chars = "0Aa1Bb2Cc3Dd4Ee5Ff6Gg7Hh8Ii9Jj0Kk1Ll2Mm3Nn4Oo5Pp6Qq7Rr8Ss9Tt0Uu1Vv2Ww3Xx4Yy5Zz";
            var string_length = 7;
            captchastring = '';
            for (var i = 0; i < string_length; i++) {
                var rnum = Math.floor(Math.random() * chars.length);
                captchastring += chars.substring(rnum, rnum + 1);
            }
            document.getElementById("randomfield").innerHTML = captchastring;
        }

        function validation() {
            var text2 = document.getElementById("txtcode").value;
            if (text2 == captchastring) {

                var email = document.getElementById("UserEmail").value;

                x = document.getElementById("demo");
                // Find the element

                x.innerHTML = "valid";
                x.style.color = "#ff0000";

            }
            else {

                x = document.getElementById("demo");  // Find the element
                x.innerHTML = "Invalid Captcha. Try again";
                x.style.color = "#ff0000";
            }
        }

     </script>


这是我的cshtml代码的主体:

<div class="col-md-5">
                    @using (Html.BeginForm())
                    {
                                    @Html.ValidationSummary(true)
                    <h5 class="nomargin">Forgot Password</h5>

                         @Html.TextBoxFor(u => u.UserEmail, new { @class = "form-control", placeholder = "Email" })
                        <br />
                        <div id="captcha">
                            <div id="captcha_gen">
                                <label id="randomfield">
                                </label>
                            </div>
                            <button type="button" onclick="getCaptcha();" style="border: 0; background: transparent;float:right; position:relative";>
                                <img src="../../Content/FSLBootstrapUI/images/playback_reload.png" width="25" height="25" alt="submit" />
                                     </button>
                        </div>

                        <input type="text" id="txtcode"  class="form-control" placeholder="Enter code here" />

                        <button class="btn btn-success btn-block" value="submit" onclick="validation()">Reset</button> <p id="demo"> </p>


                    }
                </div>

最佳答案

目前正在发生什么?我的意思是,应用程序的行为如何?
编辑:
您可以尝试服务器端验证,例如,如果您有一个要验证的字段,则可以在其中添加验证标签,例如:

<input type="text" name="SampleTextBox" id="SampleTextBoxId"/>
 @Html.ValidationMessage("SampleTextBox", "*")


然后转到控制器并添加以下代码:

if (!string.IsNullOrEmpty(SampleTextBox))
{
//Your Code.
}
  else
{
  ViewData.ModelState.AddModelError("SampleTextBoxId", "Text should not be empty.");
}


使用Model.IsValid作为编写主代码的条件。
 如果执行Model.IsValid,则ViewData.ModelState.AddModelError("SampleTextBoxId", "Text should not be empty.");变为False。
这是添加验证的方法。您可以在控制器本身中检查有效/无效的验证码并抛出错误。
例如:

if (IsValidCaptcha(enteredCaptcha))
{
//Code
}
else
{
ViewData.ModelState.AddModelError("captchaId", "Enter valid captcha");
}


最后,将验证摘要添加到您的页面

@Html.ValidationSummary("Error Messages")

09-25 17:00