《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》之继续扩展

首先需要对xVal有点熟悉:

http://www.codeplex.com/xval

建议下载最新源码而不是编译版本

再看两篇文章:

http://goneale.com/2009/03/04/using-metadatatype-attribute-with-aspnet-mvc-xval- validation-framework/

深山老林将之翻译为:《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》

http://www.cnblogs.com/wlb/archive/2009/12/01/1614209.html

现在有个"比较验证"的需求,比如注册帐号时候,需要判断两次输入的密码是否一致,再比如有时候 需要比较输入的值是否大于(小于)某个值或某个html控件的值等等。

而深山老林翻译提供的方法并不支持这种方式,原因是是什么呢?

进行比较时需要两个属性(或字段),ValidationAttribute如果用在某一个属性上,无法获取该属性所 属的实例,也就无法获取另一个属性值进行比较。(如果可以获取还望一定告知)

因此,这里就用基于类的特性校验方式。

参考ASP.NET MVC 2 RC Demo 自定义类一个比较ValidationAttribute为StringCompareAttribute只是 简单的比较连个字符串是否相等(完全有必要完善成类似于WebForm的CompareControl的效果):

1: [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited =  true)]
2: public class StringCompareAttribute : ValidationAttribute
3: {
4:    public string SourceProperty { get; private set; }
5:   public string  OriginalProperty { get; private set; }
6:
7:   private const string  _defaultErrorMessage = "'{0}' 与 '{1}' 不相等";
8:
9:   public  StringCompareAttribute(string sourceProperty, string originalProperty)
10:     :  base(_defaultErrorMessage)
11:   {
12:     SourceProperty =  sourceProperty;
13:     OriginalProperty = originalProperty;
15:   }
16:
17:   public override string FormatErrorMessage(string name)
18:    {
19:     return String.Format(CultureInfo.CurrentUICulture,  ErrorMessageString,
20:       SourceProperty, OriginalProperty);
21:   }
22:
23:   public override bool IsValid(object value)//value这里就不是属性或字 段的值了,而是实体的实例
24:   {
25:     PropertyDescriptorCollection  properties = TypeDescriptor.GetProperties(value);
26:     object sourceProperty  = properties.Find(SourceProperty, true /* ignoreCase */).GetValue(value);
27:      object originalProperty = properties.Find(OriginalProperty, true /* ignoreCase  */).GetValue(value);
28:
29:     return object.Equals(sourceProperty,  originalProperty);
30:   }
31:
32: }
33:

时间: 2024-10-29 13:38:54

《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》之继续扩展的相关文章

ASP.NET MVC验证框架中关于属性标记的通用扩展方法

之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使用Data Annotation Validators方式验证的时候,如果数据库是Entityframework等自动生成的文件,就没有办法使用扩展属性标记进行标记.现在已经开始有了一些其它的Asp.net MVC 验证框架,使用上跟Data Annotation Validators差不太多,但是普遍有这样的问题,如果数据库是Entityframework生成的edm文件,没有办法进行扩展属性标记. 今天在网上发现了另外一

一起谈.NET技术,ASP.NET MVC验证框架中关于属性标记的通用扩展方法

之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使用Data Annotation Validators方式验证的时候,如果数据库是Entityframework等自动生成的文件,就没有办法使用扩展属性标记进行标记.现在已经开始有了一些其它的Asp.net MVC 验证框架,使用上跟Data Annotation Validators差不太多,但是普遍有这样的问题,如果数据库是Entityframework生成的edm文件,没有办法进行扩展属性标记. 今天在网上发现了另外一

解决Asp.net Mvc返回JsonResult中DateTime类型数据格式问题的方法_实用技巧

问题背景:            在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符串是它默认转为Date(84923838332223)的格式,在经过查资料发现使用前端来解决这个问题的方法不少,但是我又发现在使用jquery easyui时,加载列表数据又不能对数据进行拦截,进行数据格式转换之后再加载,后来发现可以通过自定义JsonResult实现,认为这种

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    (5):前台Jquery easyUI实现    (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一     (9):TT摸版

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    (5):前台Jquery easyUI实现    (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一     

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装          (5):前台Jquery easyUI实现   (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSessi

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装          (5):前台Jquery easyUI实现   (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一          (9):TT摸版

ASP.NET MVC 验证方式(1)

实现一个简单的验证(C#) 本部分主要目的是说明如何在ASP.NET MVC应用程序中实现验证.例如,将了解如何验证一个表单提交时必填内容的合法性.了解如何应用model state和验证相关的HTML helpers. 理解Model State 你使用model state,更准确点说是使用model state 字典去表示验证错误.比如,列表一中的Create()方法,在产品类保存入库之前去验证产品类的属性. 把验证和数据逻辑加到控制类中是违反编程方法的,控制类中应该仅包含程序的流程逻辑.

“.NET研究”专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭凡专门采访了微软MVP衣明志老师.ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET WEB应用程序的一个框架. MVP专访人物介绍 衣明志,蝉联五届微软MVP,烟台.NET俱乐部主席,现主要从事.NET平台下的Web应用开发.解决方案.构架设计及技术培训等工作.   照片居中者为衣