条款时的流利验证

时间:2016-10-17 11:10:35

标签: asp.net-mvc fluentvalidation

我正在开发一个ASP.Net MVC 5 Web应用程序,并且我使用FluentValidation(https://github.com/JeremySkinner/FluentValidation)进行验证。我在.When()条款中遇到问题,因为我无法使其正常工作。但是,我可以使用.NotEmpty()和.Length()子句之类的工作。

这是我的Viewmodel类

[Validator(typeof(ViewModelEmployerValidator))]
public class ViewModelEmployer
{
    public string CurrentLineManagerEmail { get; set; }
    public string NewLineManagerEmail { get; set; }
}

public class ViewModelEmployerValidator : AbstractValidator<ViewModelEmployer>
{
    public ViewModelEmployerValidator()
    {
        RuleFor(x => x.NewLineManagerEmail).NotEmpty().When(x => x.CurrentLineManagerEmail == "").WithMessage("Please enter your new Line Manager Email");
    }
}

我的剃刀视图

<div>
    <div class="form-group">
        @Html.TextBoxFor(model => model.CurrentLineManagerEmail, new { @class = "form-control", placeholder = "Current Line Manager Email" })
        @Html.ValidationMessageFor(model => model.CurrentLineManagerEmail)
    </div>
</div>

<div>
    <div class="form-group">
        @Html.TextBoxFor(model => model.NewLineManagerEmail, new { @class = "form-control", placeholder = "New Line Manager Email" })
        @Html.ValidationMessageFor(model => model.NewLineManagerEmail)
    </div>
</div>

当用户提交表单时,即使文本框CurrentLineManagerEmail保留为空,.When()验证也会选择该规则并要求用户输入新的直线经理电子邮件。

但是,如上所述,.NotEmpty()和.Length()之类的东西或者它们自己的工作正常。只有当我添加.When()子句时,验证才会失败。

有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:2)

FluentValidation对客户端验证的支持有限:

  

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

     
      
  • NOTNULL / NotEmpty
  •   
  • 匹配(正则表达式)
  •   
  • InclusiveBetween(range)
  •   
  • 信用卡式
  •   
  • 电子邮件
  •   
  • EqualTo(跨财产平等比较)
  •   
  • 长度
  •   

(来自https://fluentvalidation.codeplex.com/wikipage?title=mvc