• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    .NET验证组件Fluent Validation使用指南

    认识Fluent Vaidation.

      看到NopCommerce项目中用到这个组建是如此的简单,将数据验证从业务实体类中分离出来,真是一个天才的想法,后来才知道这个东西是一个开源的轻量级验证组建。
     
      Fluent Validation 翻译为:流畅验证
     
      开源Codeplex其主页简介:该组件是一个轻量级的.NET类库,使用流畅的接口定义和lambda表达式为构建一个业务类的验证规则(A small validation library for .NET that uses a fluent interface and lambda expression for building validation rules for you business objects.)
     
      这个类库不仅仅可以使用的asp.net mvc项目中,普通的类库中也可以使用,当然在asp.net form项目中也支持。

    怎么使用:  
      是不是好用,还要看使用时是否真的像其官网建议描述一样。我比较喜欢其官网上的例子,一眼就能看出用法上的感觉,绝对是如其名,流畅,这个也一种解释型语言常见的的一种用法,无限的对一个类型支持无限度个属性扩展。

    业务实体类:
     

    复制代码 代码如下:

     public class Person
     {
         public string NameField;
         public int Id { get; set; }
         public string Surname { get; set; }
         public string Forename { get; set; }
         public ListPerson> Children { get; set; }
         public string[] NickNames { get; set; }
         public DateTime DateOfBirth { get; set; }
         public int? NullableInt { get; set; }
         public Person()
         {
             Children = new ListPerson>();
             Orders = new ListOrder>();
         }
         public int CalculateSalary()
         {
             return 20;
         }
         public Address Address { get; set; }
         public IListOrder> Orders { get; set; }
         public string Email { get; set; }
         public decimal Discount { get; set; }
         public double Age { get; set; }
         public int AnotherInt { get; set; }
         public string CreditCard { get; set; }
         public int? OtherNullableInt { get; set; }
     }
     public interface IAddress
     {
         string Line1 { get; set; }
         string Line2 { get; set; }
         string Town { get; set; }
         string County { get; set; }
         string Postcode { get; set; }
         Country Country { get; set; }
     }
     public class Address : IAddress
     {
         public string Line1 { get; set; }
         public string Line2 { get; set; }
         public string Town { get; set; }
         public string County { get; set; }
         public string Postcode { get; set; }
         public Country Country { get; set; }
         public int Id { get; set; }
     }
     public class Country
     {
         public string Name { get; set; }
     }
     public interface IOrder
     {
         decimal Amount { get; }
     }
     public class Order : IOrder
     {
         public string ProductName { get; set; }
         public decimal Amount { get; set; }
     }

    对Person的指定验证规则:  
     

    复制代码 代码如下:

     using FluentValidation;
     public class CustomerValidator: AbstractValidatorCustomer>
     {
       public CustomerValidator()
       {
         RuleFor(customer => customer.Surname).NotEmpty();
         RuleFor(customer => customer.Forename).NotEmpty().WithMessage("Please specify a first name");
         RuleFor(customer => customer.Discount).NotEqual(0).When(customer => customer.HasDiscount);
         RuleFor(customer => customer.Address).Length(20, 250);
         RuleFor(customer => customer.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");
       }
       private bool BeAValidPostcode(string postcode)
       {
         // custom postcode validating logic goes here
       }
     }
     // 手动验证规则
     Customer customer = new Customer();
     CustomerValidator validator = new CustomerValidator();
     ValidationResult results = validator.Validate(customer);
     bool validationSucceeded = results.IsValid;
     IListValidationFailure> failures = results.Errors;

    Flent validation怎么与asp.net mvc验证库整合?
      如果在asp.net mvc中现实中这么用,可能会有很多人不会知道他,我们知道Asp.net MVC项目中有自己的验证机构[企业库VAB(Validation Application Block),基于Attribute声明式验证],其使用方法,也被我们都一直很认可,但其也有很多不够灵活的,但Fluent Validation确实更灵活一点。使用起来多变性,流畅,而且验证规则是一个单独的类,是和业务实体对象分类的,我们不需要翔VAB一样,需要在业务实体类上使用Attribute注册验证规则。
     
      既然其不是ASP.NET MVC的默认验证规则类库,我们就需要注册到ASP.NET MVC的验证规则库中。
     

    复制代码 代码如下:

     // 在Global.asax.cs中的Applicaton_Start()函数中注册为asp.net mvc默认的验证规则库。
     // fluent validation
     FluentValidationModelValidatorProvider provider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory());
     ModelValidatorProviders.Providers.Add(provider);
     DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

    注意:
      1,)作为Fluent Validation验证规则类须继承AbstractValidatorT>;
     
      2,)我们也可以仿照NopCommerce的处理方法,对AttributeValidatorFactory类的Validator(Type type)函数重写,在特殊的业务环境下支持其他验证规则。

    本文适合对.net以及MVC有所了解的读者,这里抛砖引玉,献丑了

    您可能感兴趣的文章:
    • jquery validation插件表单验证的一个例子
    • Jquery Validation插件防止重复提交表单的解决方法
    • jQuery Validation插件remote验证方式的Bug解决
    • JQuery的Validation插件中Remote验证的中文问题
    • jQuery Validation实例代码 让验证变得如此容易
    • ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
    • ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
    • ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
    • ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
    • 修改jQuery Validation里默认的验证方法
    • ASP.NET中实现jQuery Validation-Engine的Ajax验证
    • jquery validation验证身份证号,护照,电话号码,email(实例代码)
    • jQuery验证插件validation使用指南
    • jquery Validation表单验证使用详解
    • jquery插件validation实现验证身份证号等
    • 支持ASP.NET MVC、WebFroM的表单验证框架ValidationSuar使用介绍
    • 表单验证插件Validation应用的实例讲解
    上一篇:asp.net fileupload控件上传文件与多文件上传
    下一篇:asp.net FileUpload控件实现文件格式判断与文件大小限制
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    .NET验证组件Fluent Validation使用指南 .NET,验证,组件,Fluent,Validation,