Razor 页面中的流畅验证

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 能够检测到错误消息,但不确定为什么它不会显示在页面上。有什么想法吗?提前致谢!

Ren*_*ena 5

ValidationFailure 能够检测到错误消息,但不确定为什么它不会显示在页面上。有什么想法吗?

那是因为你的键名data-valmsg-forNewItem.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)