博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Validator验证框架 [ .Net | Validator Framework | Attribute ]
阅读量:6939 次
发布时间:2019-06-27

本文共 2903 字,大约阅读时间需要 9 分钟。

前言

     简单易用是.Net Validator验证框架努力的目标。基于Attribute验证器标识,丰富的验证返回类型,提供可扩展的验证器接口......——又一个心愿和想法实质性的开始,开心ing  :  )

 

 

正文

      一、框架介绍

    本框架基于类属性(Property)的Attribute验证器标示,匹配属性(Property)名和Form、QueryString中的Key以及服务器端控件的ID名称,再根据验证器对数据进行校验。

    验证器结构图

 

 

   二、框架使用例子

    2.1  常规验证

      2.1.1  准备Model类User,注意引用命名空间using Lasy.Validator;

    
public
 
sealed
 
class
 User
    {
        
#region
 Member Variable
        
private
 
string
 username;
        
private
 
string
 email;
        
private
 
int
 userpermission;
        
#endregion
        
#region
 Properties
        
///
 
<summary>
        
///
 用户名
        
///
 
</summary>
        [Required]
        
public
 
string
 Username
        {
            
get
 { 
return
 username; }
            
set
 { username 
=
 value; }
        }
        
///
 
<summary>
        
///
 电子邮箱
        
///
 
</summary>
        [Email]
        
public
 
string
 Email
        {
            
get
 { 
return
 email; }
            
set
 { email 
=
 value; }
        }
        
///
 
<summary>
        
///
 用户权限
        
///
 
</summary>
        [IntRange(
1
5
)]
        
public
 
int
 Userpermission
        {
            
get
 { 
return
 userpermission; }
            
set
 { userpermission 
=
 value; }
        }
        
#endregion
    }

      2.1.2  控制台测试类 

 

        
static
 
void
 Main(
string
[] args)
        {
            IDictionary
<
string
object
>
 dict 
=
 
new
 Dictionary
<
string
object
>
();
            dict.Add(
"
Username
"
"
over
"
);
            dict.Add(
"
Email
"
"
over140gmail.com
"
);
            dict.Add(
"
Userpermission
"
"
5
"
);
            Validator validator 
=
 
new
 Validator(
typeof
(User));
            Console.Write(
"
Validator Result:
"
);
            Console.WriteLine(validator.Validate(dict).ErrorStringResult);
            dict[
"
Email
"
=
 
"
over140@gmail.com
"
;
            Console.Write(
"
Validator Result:
"
);
            Console.WriteLine(validator.Validate(dict).BoolResult);
            Console.ReadLine();
        }

      2.1.3  结果显示截图

       

    2.2  表单验证

      2.2.1  User类

class
 User
{
    
#region
 Member Variable
    
private
 
string
 username;
    
private
 
string
 password;
    
#endregion
    
#region
 Properties
    
///
 
<summary>
    
///
 用户名
    
///
 
</summary>
    [Required]
    [MinLength(
5
, FailKeyDesc 
=
 
"
用户名
"
)]
    
public
 
string
 Username
    {
        
get
 { 
return
 username; }
        
set
 { username 
=
 value; }
    }
    
///
 
<summary>
    
///
 密码
    
///
 
</summary>
    [Required]
    
public
 
string
 Password
    {
        
get
 { 
return
 password; }
        
set
 { password 
=
 value; }
    }
    
#endregion
}

       2.2.2  测试页面

        login.aspx

    
<
form id
=
"
form1
"
 runat
=
"
server
"
>
    用户名:
    
<
asp:TextBox ID
=
"
Username
"
 runat
=
"
server
"
></
asp:TextBox
>
    
<
br 
/>
    密码:
    
<
asp:TextBox ID
=
"
Password
"
 runat
=
"
server
"
></
asp:TextBox
>
    
<
br 
/>
    
<
asp:Button runat
=
"
server
"
 Text
=
"
登录验证
"
 onclick
=
"
Unnamed1_Click
"
 
/>
    
</
form
>

          按钮代码

 

    
protected
 
void
 Unnamed1_Click(
object
 sender, EventArgs e)
    {
        
//
获取表单所有元素 this.Controls[3].Controls
        
if
 (
new
 Validator(
typeof
(User)).Validate(
this
.Username, 
this
.Password).BoolResult)
        {
            Response.Write(
"
验证成功!
"
);
        }
        
else
        {
            Response.Write(
"
验证失败!
"
);
        }
    }

      2.2.3  效果

 

  三、使用建议

    3.1  如果已经做了客户端校验,服务器端从Request中提取表单数据进行操作,可以直接使用Validator(Type type, bool checkAll, bool setDefaultValue)构造函数,然后从ValuesResult中取得已经校验完毕IDictionary<string, object>数据。

    3.2  NoValidator与ValuesResult在提取表单数据时配套使用。

    3.3  调试的时候注意类的Attribute是静态缓存的,需要清理或重新生成修改后的验证器标识才管用!

本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/584213,如需转载请自行联系原作者

你可能感兴趣的文章
Codeforces 854 B Maxim Buys an Apartment 思维 水题
查看>>
通过1997年拓荒者号飞行器事件理解优先级反转
查看>>
python做数据清洗
查看>>
山东理工OJ【2054】双向链表(两种方法)
查看>>
2014华为机试——两个城市之间的最多路径
查看>>
[LintCode] 两个排序数组的中位数
查看>>
Linux c 学习第一天
查看>>
sql server显示某一列中有重复值的行
查看>>
dtoj#4138. 染色(ranse)
查看>>
隔离级别
查看>>
数组字典转为json
查看>>
Web容器启动中执行某个Java类
查看>>
Datastage里Aggregator的一些注意事项
查看>>
Eclipse中Maven插件部分常用功能命令介绍
查看>>
云风:我所偏爱的C语言面向对象编程范式
查看>>
IIS与Apache共用80端口
查看>>
VA助手(Visual Assist X) 笔记
查看>>
COCI2015/2016 CONTEST#4 简易题解
查看>>
测试管理工具实践Mantis-使用说明及不同环境下的安装
查看>>
小团队如何提高工作效率
查看>>