在 fluentValidation 中使用 must
using must in fluentValidation
我正在使用 FluentValidation 进行服务器端验证。现在我想使用 must.
调用一个函数
这是表单代码片段:
<form method="post"
asp-controller="Category"
asp-action="SaveSpecification"
role="form"
data-ajax="true"
data-ajax-loading="#Progress"
data-ajax-success="Specification_JsMethod">
<input asp-for="Caption" class="form-control" />
<input type="hidden" asp-for="CategoryId" />
<button class="btn btn-primary" type="submit"></button>
</form>
我应该对以下代码进行哪些更改才能调用函数 SpecificationMustBeUnique?
public class SpecificationValidator : AbstractValidator<Specification>
{
public SpecificationValidator()
{
RuleFor(x => new { x.CategoryId, x.Caption}).Must(x => SpecificationMustBeUnique(x.CategoryId, x.Caption)).WithMessage("not unique");
}
private bool SpecificationMustBeUnique(int categoryId, string caption)
{
return true / false;
}
}
Tips: 1 - CategoyId 和 Caption 的组合应该是唯一的
2 - 提交表单时未完成验证(提交表单时验证未运行)
棘手的部分是当验证规则应用于不同字段上的值组合时,决定应验证哪个 属性。我通常只是闭上眼睛,指向其中一个视图模型属性并说 "this is the property I'll attach the validator to." ,几乎没有考虑。当验证规则应用于单个 属性 时,FluentValidation 效果最佳,因此它知道哪个 属性 将显示验证消息。
所以,只需选择 CategoryId
或 Caption
并将验证器附加到它:
RuleFor(x => x.CategoryId)
.Must(BeUniqueCategoryAndCaption)
.WithMessage("{PropertyName} and Caption must be unique.");
BeUniqueCategoryAndCaption
方法的签名如下所示:
private bool BeUniqueCategoryAndCaption(Specification model, int categoryId)
{
return true / false;
}
注意:我猜 CategoryId
属性 是 int
,但您需要确保 BeUniqueCategoryAndCaption 的 categoryId
参数与您的视图模型中的 CategoryId
属性。
我正在使用 FluentValidation 进行服务器端验证。现在我想使用 must.
调用一个函数这是表单代码片段:
<form method="post"
asp-controller="Category"
asp-action="SaveSpecification"
role="form"
data-ajax="true"
data-ajax-loading="#Progress"
data-ajax-success="Specification_JsMethod">
<input asp-for="Caption" class="form-control" />
<input type="hidden" asp-for="CategoryId" />
<button class="btn btn-primary" type="submit"></button>
</form>
我应该对以下代码进行哪些更改才能调用函数 SpecificationMustBeUnique?
public class SpecificationValidator : AbstractValidator<Specification>
{
public SpecificationValidator()
{
RuleFor(x => new { x.CategoryId, x.Caption}).Must(x => SpecificationMustBeUnique(x.CategoryId, x.Caption)).WithMessage("not unique");
}
private bool SpecificationMustBeUnique(int categoryId, string caption)
{
return true / false;
}
}
Tips: 1 - CategoyId 和 Caption 的组合应该是唯一的 2 - 提交表单时未完成验证(提交表单时验证未运行)
棘手的部分是当验证规则应用于不同字段上的值组合时,决定应验证哪个 属性。我通常只是闭上眼睛,指向其中一个视图模型属性并说 "this is the property I'll attach the validator to." ,几乎没有考虑。当验证规则应用于单个 属性 时,FluentValidation 效果最佳,因此它知道哪个 属性 将显示验证消息。
所以,只需选择 CategoryId
或 Caption
并将验证器附加到它:
RuleFor(x => x.CategoryId)
.Must(BeUniqueCategoryAndCaption)
.WithMessage("{PropertyName} and Caption must be unique.");
BeUniqueCategoryAndCaption
方法的签名如下所示:
private bool BeUniqueCategoryAndCaption(Specification model, int categoryId)
{
return true / false;
}
注意:我猜 CategoryId
属性 是 int
,但您需要确保 BeUniqueCategoryAndCaption 的 categoryId
参数与您的视图模型中的 CategoryId
属性。