首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fluentValidation中使用must

问在fluentValidation中使用must
EN

Stack Overflow用户
提问于 2019-08-21 20:02:02
回答 1查看 458关注 0票数 1

我使用FluentValidation进行服务器端验证。现在,我想使用must调用一个函数。

这是表单代码片段:

代码语言:javascript
复制
<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?

代码语言:javascript
复制
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;
    }
} 

提示:1- CategoyId和标题的组合应该是唯一的2-提交表单时不进行验证(提交表单时验证不运行)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-21 21:42:58

当验证规则应用于不同字段上的值的组合时,棘手的部分是决定应该验证哪个属性。我通常闭上眼睛,指着其中一个视图模型属性说:“这就是我要附加验证器的属性。”用很少的思想。当验证规则应用于单个属性时,FluentValidation工作得最好,因为它知道哪个属性将显示验证消息。

因此,只需选择CategoryId或Caption并将验证器附加到它:

代码语言:javascript
复制
RuleFor(x => x.CategoryId)
    .Must(BeUniqueCategoryAndCaption)
        .WithMessage("{PropertyName} and Caption must be unique.");

BeUniqueCategoryAndCaption方法的签名将如下所示:

代码语言:javascript
复制
private bool BeUniqueCategoryAndCaption(Specification model, int categoryId)
{
    return true / false;
}

注意:我猜CategoryId属性是一个int,但是您需要确保BeUniqueCategoryAndCaption的categoryId参数与视图模型中的CategoryId属性的类型相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57591167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档