10

在 ASP.NET MVC4 应用程序中,我们使用 FluentValidation 来验证我们的模型。在某些情况下,我们只想在另一个属性有值时验证一个属性。我们使用 When 关键字来完成此操作。一个简单的验证类如下所示:

public class PersonValidator : AbstractValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(item => item.FirstName).NotEmpty();
        RuleFor(item => item.LastName).NotEmpty().When(item => !string.IsNullOrEmpty(item.FirstName))
    }
}

我们希望对此进行客户端验证。我试图创建一个自定义 FluentValidationPropertyValidator。但我找不到一种方法来获取验证规则的 When 部分。有人可以指出我正确的方向吗?

4

3 回答 3

0

FluentValidation 中的一些验证不支持客户端验证:

从文档(http://fluentvalidation.codeplex.com/wikipage?title=mvc&referringTitle=Documentation):

请注意,FluentValidation 也适用于 ASP.NET MVC 的客户端验证,但并非所有规则都受支持。例如,使用条件(使用 When/Unless)、自定义验证器或对 Must 的调用定义的任何规则都不会在客户端运行。客户端支持以下验证器:

*NotNull/NotEmpty *Matches (regex) *InclusiveBetween (range) *CreditCard *Email *EqualTo (cross-property相等比较) *Length

于 2014-04-02T21:17:16.273 回答
0

Fluent Validation 是一个服务器端验证库。但它支持一些基本的客户端验证,如 required、maxlength 等。

如果您想为 Fluent Validation 添加完整的客户端支持,您可以使用Form Helper

您需要像这样创建表单:

var formConfig = new FormConfig(ViewContext)
{
    FormId = "ProductForm",
    FormTitle = "New Product",
    BeforeSubmit = "ProductFormBeforeSubmit", // optional
    Callback = "ProductFormCallback" // optional,
};

// <form id="@formConfig.FormId" asp-controller="Home" asp-action="Save"
// ...

@await Html.RenderFormScript(formConfig)

之后,您需要将[FormValidator]属性添加到您的操作中。

于 2019-06-15T02:02:53.027 回答
0

FluentValidation 现在支持客户端验证。客户端支持以下验证器:

  • 非空/非空
  • 匹配(正则表达式)
  • InclusiveBetween(范围)
  • 信用卡
  • 电子邮件
  • EqualTo(跨属性相等比较)
  • 最长长度
  • 最小长度
  • 长度

https://fluentvalidation.net/aspnet

于 2018-11-19T16:48:30.843 回答