使用 ExtJS 实现 ASP.NET MVC 2 客户端验证

简介:

在 ASP.NET MVC 2 中, 客户端表单验证信息不再是直接调用微软自己提供的方法, 而是将客户端表单验证的元数据放到了一个变量 (window.mvcClientValidationMetadata) 之中, 为实现第三方的客户端验证提供了可能, 由于工作中大量的使用到了 ExtJS ,于是抽时间用 ExtJS 实现了 ASP.NET MVC 2 客户端验证机制,主要有如下特点:

  • 只依赖 Ext core 即可使用,不需要完整版本的 ExtJS, 当然,如果有完整版 ExtJS 的话, 还可以调用 Ext.form.VTypes 的表单验证方法;
  • 使用方法完全遵循 ASP.NET MVC 2 提供的客户端验证机制,实现了默认的 required 、regularExpression 、 number 、range 、stringLength 客户端验证函数;
  • 可以根据 ASP.NET MVC 2 提供的验证扩展机制进行相应的扩展。

使用方法如下:

1、在要进行验证的 Model 上添加验证标记, 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public  class  RegisterModel {
 
    [Required(ErrorMessage = "用户名必须填写!" )]
    [DisplayName( "用户名:" )]
    public  string  UserName {
       get ;
       set ;
    }
 
    [Required(ErrorMessage = "密码必须填写!" )]
    [DisplayName( "密码:" )]
    [DataType(DataType.Password)]
    public  string  Password {
       get ;
       set ;
    }
 
    [Required(ErrorMessage = "邮箱必须填写" )]
    [RegularExpression( "" , ErrorMessage = "邮件格式不正确!" )]
    [DisplayName( "邮箱:" )]
    public  string  Email {
       get ;
       set ;
    }
 
    [Range(0, 100, ErrorMessage = "年龄必须在1~100之间!" )]
    [DisplayName( "年龄:" )]
    [DefaultValue(20)]
    public  int  Age {
       get ;
       set ;
    }
 
}

2、在 View 中添加下面的代码,除了要使用 ExtJS 的脚本之外, 与普通的 View 没有什么区别, 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 先引入ExtJS -->
< link  rel="Stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-3.2.1/resources/css/ext-all.css">
 
 
 
< link  href="/Assets/Site.css" rel="stylesheet" type="text/css">;
 
<!-- 下面开始表单 -->
< h2 >ExtJS 实现 ASP.NET MVC 2 客户端验证</ h2 >
<% Html.EnableClientValidation(); %>;
<%= Html.ValidationSummary(true, "输入信息不完整,无法完成注册。") %>
<% using (Html.BeginForm()) { %>
<%= Html.EditorForModel() %>
< input  value="注册" type="submit">
< input  value="取消" type="reset">
<% } %>;

运行效果如下图所示:
2010-06-05_150039

如果要做扩展自定义验证的话,需要做完成下面两部分:

1、参考 msdn 文档,添加服务端验证扩展, 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false )]
public  class  CustomAttribute : ValidationAttribute {
 
    public  override  bool  IsValid( object  value) {
       var  val = value as  string ;
       if  ( string .IsNullOrEmpty(val)) {
          return  false ;
       }
       return  val.Equals( "Hello,world!" , StringComparison.OrdinalIgnoreCase);
    }
}
 
public  class  CustomValidator : DataAnnotationsModelValidator<customattribute> {
 
    public  CustomValidator(ModelMetadata metadata, ControllerContext context, CustomAttribute attribute)
       : base (metadata, context, attribute) {
    }
 
    public  override  IEnumerable<modelclientvalidationrule> GetClientValidationRules() {
       return  new [] {
          new  ModelClientValidationRule {
             ErrorMessage = "输入: Hello,world!" ,
             ValidationType = "custom"
          }
       };
    }
}
</modelclientvalidationrule></customattribute>

2、添加对应的客户端验证实现,代码如下:

1
2
3
4
5
Ext.apply(Ext.ux.mvc.VTypes, {
    custom: function (val, param) {
       return  val.toLowerCase() == 'hello,world!' ;
    }
});
3、在 Model 上添加属性,使用扩展验证,代码如下:

4、在 App_Start 注册该扩展,代码如下:

1
DataAnnotationsModelValidatorProvider.RegisterAdapter( typeof (CustomAttribute), typeof (CustomValidator));

5、添加扩展之后的运行效果如下图:
2010-06-05_150121

如果你工作中也用到了 ExtJS 和 ASP.NET MVC 2 的话,可以下载这个文件来尝试一下。

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/

本文转自张志敏博客园博客,原文链接:http://www.cnblogs.com/beginor/archive/2010/06/05/1752268.html ,如需转载请自行联系原作者
相关文章
|
1月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
59 8
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
58 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
47 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
6月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
191 0
|
6月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
78 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
163 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
100 0

相关实验场景

更多