Google ReCaptcha не показывает ошибку, когда не заполнены пользовательские формы Umbraco - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в точечной сети. Я пытался отобразить сообщение об ошибке, когда recaptha не заполнено, но ModelState.AddModelError не показывает ошибку.поэтому я попытался таким образом, но все равно ошибка не будет отображаться в моем представлении

Модель мой Modelfile

public class ContactFormViewModel{

    [Required(ErrorMessage ="Required")]
    public string FullName { get; set; }
    [Required(ErrorMessage = "Required")]
    public string Email { get; set; }
    [Required(ErrorMessage = "Required")]
    public string Subject { get; set; }
    public string Message { get; set; }
    public string ErrorMessageCaptcha { get; set; }     
    public string FeedbackField { get; set; }
    public string SubmittedFromUrl { get; set; }
}

Контроллер мойфайл контроллера

public ActionResult SubmitFormAsync(ContactFormViewModel submittedForm)
    {


        RecaptchaVerificationHelper recaptchaHelper = this.GetRecaptchaVerificationHelper();
        if (string.IsNullOrEmpty(recaptchaHelper.Response))
        {
            // ModelState.AddModelError(string.Empty, "Please complete the reCAPTCHA");
            //  ModelState.AddModelError("reCAPTCHA", "The reCAPTCHA is incorrect");

            submittedForm.ErrorMessageCaptcha = "Email not found or matched";
            //  return CurrentUmbracoPage();
            return PartialView(submittedForm);
            // return View();
        }
        else
        {
            RecaptchaVerificationResult recaptchaResult = recaptchaHelper.VerifyRecaptchaResponse();
            if (recaptchaResult != RecaptchaVerificationResult.Success)
            {

                //  ModelState.AddModelError("reCAPTCHA", "Please complete the reCAPTCHA");
                //ModelState.AddModelError(string.Empty, "The reCAPTCHA is incorrect");
                submittedForm.ErrorMessageCaptcha = "Email not found or matched1";
                //  return CurrentUmbracoPage();
                return PartialView(submittedForm);
                // return View();
            }
        } 

        //FeedbackField is Honeypot captcha
        if (!ModelState.IsValid || !string.IsNullOrEmpty(submittedForm.FeedbackField))
        {}

Просмотр файл моего просмотра

 <div class="form-group">
            <input type="hidden" class="hidden" name="PageId" value="@currentPage.Id" />
            @Html.Recaptcha(theme: Recaptcha.Web.RecaptchaTheme.Clean)

            <p class="error-message">@Model.ErrorMessageCaptcha</p>
            @*@if (ViewData.ModelState.IsValid)
            {

                @Html.ValidationSummary()

            }*@


            @Html.Label("error message", new { style = "display:none", id = "recaptchaErrorMessage" })

            <button type="submit" id="btn-form-submit" class="btn-secondary pull-right">@currentPage.GetPropertyValue("buttonText")</button>
        </div>

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Попробуйте это.Проверка работает нормально.Замените эти строки

Контроллер

RecaptchaVerificationHelper recaptchaHelper = this.GetRecaptchaVerificationHelper();
            if (string.IsNullOrEmpty(recaptchaHelper.Response))
            {
                ModelState.AddModelError("reCAPTCHA", "Please complete the reCAPTCHA");
                return CurrentUmbracoPage();
            }
            else
            {
                RecaptchaVerificationResult recaptchaResult = recaptchaHelper.VerifyRecaptchaResponse();
                if (recaptchaResult != RecaptchaVerificationResult.Success)
                {
                    ModelState.AddModelError("reCAPTCHA", "The reCAPTCHA is incorrect");
                    return CurrentUmbracoPage();
                }
            }

Просмотр

       <div class="form-group col-sm-12">
                @Html.Recaptcha(theme: Recaptcha.Web.RecaptchaTheme.Clean)

                @{
                    var errors = ViewData.ModelState.Values.SelectMany(v => v.Errors);
                }
                @if (errors != null && errors.Any())
                {
                    @Html.Label(errors.FirstOrDefault().ErrorMessage, new { id = "recaptchaErrorMessage" })
                }
            </div>
0 голосов
/ 18 февраля 2019

не уверен, какую версию или recaptcha вы используете, но я использовал его в ряде моих пользовательских форм, которые я собираю, и если я прав по умолчанию, кнопка recaptcha добавляет дополнительный ввод, который при отправке формы добавляетсяк вашим данным формы.Поэтому в моих формах я просто проверяю это дополнительное поле и создаю собственное простое сообщение об ошибке и возвращаю текущую страницу с ошибкой, как показано ниже:

var formData = Request.Form;
        var captchaRequest = formData["g-recaptcha-response"];
        if (string.IsNullOrWhiteSpace(captchaRequest) || !ModelState.IsValid)
        {
            TempData["contactError"] = "Ops... Form Error, There was an error with your details please check them and try again.";
            return CurrentUmbracoPage();
        }

Помните, что ModelState будет действителен даже безЗаполнено recaptcha, в моем случае это просто захватить все сообщения.

...