基于此page,我试图制作一个使用流利验证的剃刀页面。它似乎已经检查了,但是我不确定为什么不会显示错误消息。
这是我到目前为止所做的:
cshtml.cs:
CreateCommandValidator CreateValidator = new CreateCommandValidator();
var createCheck = CreateValidator.Validate(NewItem);
foreach (ValidationFailure fail in createCheck.Errors)
{
ModelState.AddModelError(fail.PropertyName, fail.ErrorMessage);
}
return Page();
cshtml:
<label class="col-form-label">Name</label>
<input asp-for="NewItem.Name" type="text" class="form-control mb-2"/>
<span asp-validation-for="NewItem.Name" class="text-danger"></span>
CreateCommandValidator:
RuleFor
(Item => Item.Name)
.NotEmpty().WithMessage("The name cannot be empty")
.Length(1, 100);
ValidationFailure能够检测到错误消息,但不确定为什么它不会在页面上显示。有什么想法吗?预先感谢!
答案 0 :(得分:0)
如果还没有脚本,则需要使用脚本来进行无干扰的验证。
示例
查看(cshtml):
@{
ViewData["Title"] = "Log in";
}
<section>
<div class="container">
</div>
</section>
@section Scripts {
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
}
共享布局(_Layout.cshtml)应具有脚本部分
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div class="main-container">
@RenderBody()
</div>
@RenderSection("Scripts", required: false)
</body>
</html>
答案 1 :(得分:0)
ValidationFailure能够检测到错误消息,但不能确定 为什么它不会显示在页面上。有什么想法吗?
这是因为您的data-valmsg-for
的键名是NewItem.Name
。
您的cshtml文件如下:
<span asp-validation-for="NewItem.Name" class="text-danger"></span>
将在浏览器中生成如下所示的html:
<span data-valmsg-for="NewItem.Name" class="text-danger field-validation-valid" data-valmsg-replace="true"></span>
1。第一种方法,您可以如下更改密钥名称:
ModelState.AddModelError("NewItem.Name", fail.ErrorMessage);
2。第二种方法,如果您不想手动添加密钥名称,则可以安装FluentValidation.AspNetCore
软件包并按如下所示更改代码:
CreateCommandValidator CreateValidator = new CreateCommandValidator();
var createCheck = CreateValidator.Validate(NewItem);
//AddToModelState(ModelStateDictionary modelState, string prefix);
createCheck.AddToModelState(ModelState, "NewItem");
return Page();