2
FluentValidation을 사용하여 ReCaptcha의 유효성을 검사하려고하지만 몇 가지 문제가 있습니다. ReCaptcha.Validate가 true를 반환하더라도 ModelState는 유효하지 않습니다. ReCaptcha의 유효성을 검사하기 위해 뷰 모델에서 필드를 추가했습니다. ModelState가 유효한지 확인하기 전에 ReCaptcha 필드를 ReCaptcha.Validate에서 반환되는 값으로 설정합니다.Fluent Validation이있는 MVC3 ReCaptcha
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(Over18Model model)
{
model.ReCaptcha = Microsoft.Web.Helpers.ReCaptcha.Validate("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
if (ModelState.IsValid)
{
var table = new Prospect();
dynamic o = new ExpandoObject();
{
o.FirstName = model.FirstName;
o.LastName = model.LastName;
o.Email = model.Email;
}
table.Save(o);
return RedirectToAction("ThankYou", "Public");
}
ModelState.AddModelError(string.Empty, "Errors: " + string.Join(" ; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage)));
return View(model);
}
[Validator(typeof(Over18ModelValidator))]
public class Over18Model
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public bool ReCaptcha { get; set; }
}
public class Over18ModelValidator : AbstractValidator<Over18Model>
{
public Over18ModelValidator()
{
RuleFor(x => x.FirstName).NotEmpty().WithMessage("First Name is Required");
RuleFor(x => x.LastName).NotEmpty().WithMessage("Last Name is Required");
RuleFor(x => x.Email).NotEmpty().WithMessage("Email is Required");
RuleFor(x => x.Email).EmailAddress().WithMessage("Invalid Email");
RuleFor(x => x.ReCaptcha).Equal(true).WithMessage("ReCaptcha error");
}
}
코드는 다음과 같습니다 면도기 ...
<div class="signUpOver18">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Form.TextBox(name: "FirstName", value: @Model.FirstName, labelText: "First Name:", containerClass: "fname", txtfldClass: "standard names", maxLength: 50)
@Form.TextBox(name: "LastName", value: @Model.LastName, labelText: "Last Name:", containerClass: "lname", txtfldClass: "standard names", maxLength: 100)
</div>
@Form.Submit(value: "Enter The Sweepstakes", myClass: "btnSubmit")
<div class="recaptchaHolder">
@ReCaptcha.GetHtml(theme: "red", publicKey: "XXX-XXXX_XXXX-XX_")
</div>
@Html.ValidationSummary(true)
}
</div>
그리고 이것은 작동하지 않습니까? – Romias