在客户端进行流畅的验证

时间:2013-03-19 08:16:38

标签: asp.net-mvc client-side-validation fluentvalidation

在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部分。 有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:0)

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

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

  

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

     

* NOTNULL / NotEmpty   *匹配(正则表达式)   * InclusiveBetween(范围)   *信用卡   *电子邮件   * EqualTo(跨属性平等比较)   *长度

答案 1 :(得分:0)

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

  • NotNull / NotEmpty
  • 匹配项(正则表达式)
  • InclusiveBetween(范围)
  • 信用卡
  • 电子邮件
  • EqualTo(跨属性平等比较)
  • MaxLength
  • MinLength
  • 长度

https://fluentvalidation.net/aspnet

答案 2 :(得分:0)

Fluent验证是一个服务器端验证库。但是它支持一些基本的客户端验证,例如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] 属性。

相关问题