Сообщение об ошибке BotDetect Captcha не отображается ASP.NET MVC

Я интегрировал 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
    }
}

1 ответ

Ты должен добавить !ModelState.IsValid если false затем вернитесь к представлению, потому что в вашем коде, если модель недействительна, ничего не делайте, и это не так, как работает валидация. так что-то вроде этого

[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 буду иметь keys а также values если какая-либо проверка не удалась и когда вы делаете return view(formContact); он вернется к представлению с сообщениями проверки и сопоставит ключ и отобразит сообщение об ошибке, например, пусть у меня есть

@Html.ValidationMessage("ContactCaptchaCode");

если проверка не пройдена для этого свойства modelstate буду иметь key=ContactCaptchaCode а также value=Please enter the correct CAPTCHA code.

Другие вопросы по тегам