纸壳CMS自带验证码,在表单中添加验证码也比较简单。只需要将某个字段定义为验证码即可,纸壳CMS将会自动验证用户输入的验证码是否有效。
在ViewModel
中定义一个Captcha
属性,例如:
[DataTable("CMS_Message")]
public class MessageEntity : EditorEntity
{
[Key]
public int ID { get; set; }
public string Email { get; set; }
public string PostMessage { get; set; }
public string Reply { get; set; }
[NotMapped]
public string Captcha { get; set; }
}
然后元数据的配置中将Captcha
属性配置为验证码:
class MessageMetaData : ViewMetaData<MessageEntity>
{
protected override void ViewConfigure()
{
......
ViewConfig(m => m.Captcha).AsImageCaptcha();
}
}
再将验证码输出到表单中:
<div class="form-group">
@Html.EditorFor(m => m.Captcha)
@Html.ValidationMessageFor(m => m.Captcha)
</div>
最后在Controller
中使用ModelState.IsValid
来判断用户的所有输入是否验证通过,包括验证码:
[HttpPost, ValidateAntiForgeryToken, RenderRefererPage]
public IActionResult PostMessage(MessageEntity entity)
{
if (ModelState.IsValid)
{
entity.Status = (int)RecordStatus.InActive;
var result = _messageService.Add(entity);
ModelState.Merge(result);
if (!result.HasViolation)
{
TempData["Message"] = _localize.Get("Thank You for your submit!");
}
}
return View(entity);
}
当用户的输入无效时,将会返回页面提示用户重新输入。