【问题标题】:BotDetect Captcha Error Message is not displaying ASP.NET MVCBotDetect Captcha 错误消息未显示 ASP.NET MVC
【发布时间】:2017-03-11 00:55:22
【问题描述】:

我已将 BotDetect Captcha 集成到我的 ASP.NET MVC 表单中,当用户输入错误的 Captcha 值时,我无法显示验证消息。

我需要更改哪些内容才能显示验证消息?

编辑 - 我添加了视图的Html.BeginForm 部分,以表明回发将转到控制器中的不同操作。

源代码 - 查看

@using(Html.BeginForm("Create", "Contact", FormMethod.Post, new { enctype = 'multipart/form-data' }))
{
    @{ 
        MvcCaptcha contactCaptcha = new MvcCaptcha("ContactCaptcha");
        contactCaptcha.UserInputID = "ContactCaptchaCode";
    }
    To prevent spam, we utilize a verification code system.  Please enter the code as it is shown in the box below.<br />
    @Html.Captcha(contactCaptcha)<br />
    Code:<br />
    @Html.TextBox("ContactCaptchaCode", string.Empty, new { @class = "form-   control", @style = "width: 200px" })                
    <div class="row">
        <div class="col-sm-12" style="text-align: right">
            <input type="submit" value="Send" class="btn-default" />
            @Html.ValidationMessage("ContactCaptchaCode", new { @class = "text-danger" }) 
        </div>
    </div>
}

源代码 - 控制器

[HttpPost]
[AllowAnonymous]
[CaptchaValidation("ContactCaptchaCode", "ContactCaptcha", "Please enter the correct CAPTCHA code.")]
public ActionResult Create(Models.Contact formContact)
{
    if(ModelState.IsValid)
    {
        //do stuff here is correct captcha value
    }
}

【问题讨论】:

  • 你是说ModelState即使你输入了错误的值也总是有效的?
  • 如果无效,那么你只需要else { return View(formContact); }返回视图并显示错误信息
  • @StephenMuecke 不,当他们输入正确的验证码时,ModelState 是有效的,当他们输入无效的验证码时,它会阻止表单被处理,ModelState.IsValid = false
  • 如果ModelState无效返回视图时,你是说消息不显示?

标签: c# asp.net-mvc captcha botdetect


【解决方案1】:

如果 false 则必须添加 !ModelState.IsValid 然后返回视图,因为在您的代码中,如果模型无效,则什么也不做,这不是验证的工作方式。所以做这样的事情

[HttpPost]
[AllowAnonymous]
[CaptchaValidation("ContactCaptchaCode", "ContactCaptcha", "Please enter the correct CAPTCHA code.")]
public ActionResult Create(Models.Contact formContact)
{
    if(!ModelState.IsValid)
  {
      return view(formContact);
  }

    //if valid do your code here
}

现在,如果您放置一个断点,您将看到 ModelState 将有 keysvalues 如果任何验证失败,并且当您执行 return view(formContact); 时,它将返回到带有验证消息的视图并且它将匹配键并显示错误消息,例如假设我有

@Html.ValidationMessage("ContactCaptchaCode");

如果此属性的验证失败modelstate 将有key=ContactCaptchaCodevalue=Please enter the correct CAPTCHA code.

【讨论】:

  • 我应该提一提的一点,我正在使用Html.BeginForm 重载,我在提交表单后显式配置路由。即("Create", "Contact", FormMethod.Post)。这会对 CAPTCHA 验证的行为产生影响吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多