Zor*_*noz 4 error-handling fluentvalidation razor asp.net-core razor-pages
基于此页面,我正在尝试制作一个使用流畅验证的剃刀页面。它似乎已经检查过,但我不确定为什么错误消息不会显示。
这是我到目前为止所做的:
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();
Run Code Online (Sandbox Code Playgroud)
.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>
Run Code Online (Sandbox Code Playgroud)
创建命令验证器:
RuleFor
(Item => Item.Name)
.NotEmpty().WithMessage("The name cannot be empty")
.Length(1, 100);
Run Code Online (Sandbox Code Playgroud)
ValidationFailure 能够检测到错误消息,但不确定为什么它不会显示在页面上。有什么想法吗?提前致谢!
ValidationFailure 能够检测到错误消息,但不确定为什么它不会显示在页面上。有什么想法吗?
那是因为你的键名data-valmsg-for是NewItem.Name.
您的 cshtml 文件如下:
<span asp-validation-for="NewItem.Name" class="text-danger"></span>
Run Code Online (Sandbox Code Playgroud)
将在浏览器中生成如下 html:
<span data-valmsg-for="NewItem.Name" class="text-danger field-validation-valid" data-valmsg-replace="true"></span>
Run Code Online (Sandbox Code Playgroud)
1.第一种方法,您可以更改键名,如下所示:
ModelState.AddModelError("NewItem.Name", fail.ErrorMessage);
Run Code Online (Sandbox Code Playgroud)
2.第二种方式,如果您不想手动添加密钥名称,您可以安装FluentValidation.AspNetCore软件包并更改代码,如下所示:
CreateCommandValidator CreateValidator = new CreateCommandValidator();
var createCheck = CreateValidator.Validate(NewItem);
//AddToModelState(ModelStateDictionary modelState, string prefix);
createCheck.AddToModelState(ModelState, "NewItem");
return Page();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3114 次 |
| 最近记录: |