XAF实现运行时填加验证规则并保存到数据库中
此示例所示的 RuleRequiredFieldPersistent 类是一个普通的业务类。类实现 IRuleSource 接口,并用于创建和存储在数据库中的 RuleRequiredField 验证规则。在 CreateRules 方法中实例化一个 RuleRequiredField 验证规则,基于 RuleRequiredFieldPersistent 类的公共属性的值。RuleRequiredFieldPersistent 类标记 DefaultClassOptionsAttribute,以便最终用户可以手动创建验证规则通过相应的列表视图。
[DefaultClassOptions]
public class RuleRequiredFieldPersistent : BaseObject,
DevExpress.Persistent.Validation.IRuleSource {
public RuleRequiredFieldPersistent(Session session) : base(session) { }
public string RuleName {
get { return GetPropertyValue<string>("RuleName"); }
set { SetPropertyValue("RuleName", value); }
}
public string CustomMessageTemplate {
get { return GetPropertyValue<string>("CustomMessageTemplate"); }
set { SetPropertyValue("CustomMessageTemplate", value); }
}
public bool SkipNullOrEmptyValues {
get { return GetPropertyValue<bool>("SkipNullOrEmptyValues"); }
set { SetPropertyValue("SkipNullOrEmptyValues", value); }
}
public string Id {
get { return GetPropertyValue<string>("Id"); }
set { SetPropertyValue("Id", value); }
}
public bool InvertResult {
get { return GetPropertyValue<bool>("InvertResult"); }
set { SetPropertyValue("InvertResult", value); }
}
public string ContextIDs {
get { return GetPropertyValue<string>("ContextIDs"); }
set { SetPropertyValue("ContextIDs", value); }
}
public string Property {
get { return GetPropertyValue<string>("Property"); }
set { SetPropertyValue("Property", value); }
}
[Persistent("ObjectType")]
protected string ObjectType {
get {
if(ObjectTypeCore != null) {
return ObjectTypeCore.FullName;
}
return "";
}
set { ObjectTypeCore = ReflectionHelper.FindType(value); }
}
[NonPersistent]
[TypeConverter(typeof(DevExpress.Persistent.Base.LocalizedClassInfoTypeConverter))]
public Type ObjectTypeCore {
get { return GetPropertyValue<Type>("ObjectTypeCore"); }
set { SetPropertyValue("ObjectTypeCore", value); }
}
#region IRuleSource Members
public System.Collections.Generic.ICollection<IRule> CreateRules() {
System.Collections.Generic.List<IRule> list = new System.Collections.Generic.List<IRule>();
RuleRequiredField rule = new RuleRequiredField();
rule.Properties.SkipNullOrEmptyValues = this.SkipNullOrEmptyValues;
rule.Properties.Id = this.Id;
rule.Properties.InvertResult = this.InvertResult;
rule.Properties.CustomMessageTemplate = this.CustomMessageTemplate;
rule.Properties.TargetContextIDs = new ContextIdentifiers(this.ContextIDs);
rule.Properties.TargetType = this.ObjectTypeCore;
if(rule.Properties.TargetType != null) {
foreach(PropertyInfo pi in rule.Properties.TargetType.GetProperties()) {
if(pi.Name == this.Property) {
rule.Properties.TargetPropertyName = pi.Name;
}
}
}
for(int i = Validator.RuleSet.RegisteredRules.Count - ; i >= ; i--) {
if(Validator.RuleSet.RegisteredRules[i].Id == this.Id) {
Validator.RuleSet.RegisteredRules.RemoveAt(i);
}
}
list.Add(rule);
return list;
}
[Browsable(false)]
public string Name {
get { return this.RuleName; }
}
#endregion
}
可以看到,这个示例中,只返回了一个规则,而在实际项目中,可以使用BO定义一个子集合,集合中定义N种规则。
不要定义N个BO并都实现 IRuleSource 那样有点浪费。
XAF实现运行时填加验证规则并保存到数据库中的更多相关文章
- XAF:如何让用户在运行时个性化界面并将个性化信息保存到数据库中 win/web/entityframework/xpo
本主题介绍如何启用管理模型差异(XAFML),并将设置存储在数据库中. 名词解释: 1.模型:XAF中把所有应用程序的结构都用模型来定义,比如列表,有哪些列,名称是什么,对应的字段名是什么,业务对 ...
- 使用jpa时,实体类有不存在数据库中的字段
使用jpa时,实体类有不存在数据库中的字段.在改属性上面加上这个注解@Transient就可以解决问题.
- 利用.NET Code Contracts实现运行时验证
.NET的Contract类库是Declarative Programming实践的一部分,可以对日常编程带来很多好处: 提高代码可读性,使用者一看Require, Ensure就知道这方法接受什么输 ...
- [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则
目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...
- Asp.net MVC验证那些事(1)-- 介绍和验证规则使用
数据的有效性验证,是程序开发中必不可少的环节.这篇文章,我们将用一个实例来说明如何在MVC中使用Validation来保证无论是新增或者更新数据的时候,都必须符合我们定义的验证规则,否则就会提示错误. ...
- Asp.net MVC验证那些事(1)-- 介绍和验证规则使用----[转]--[并修改了部分内容]
Asp.net MVC验证那些事(1)-- 介绍和验证规则使用 -----原文地址链接 数据的有效性验证,是程序开发中必不可少的环节.这篇文章,我们将用一个实例来说明如何在MVC中使用Validati ...
- MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息
Asp.net MVC中的提供非常简单易用的数据验证解决方案. 通过System.ComponentModel.DataAnnotations提供的很多的验证规则(Required, StringLe ...
- ASP.NET运行时详解 集成模式和经典模式
遗留问题 在<ASP.NET运行时详解 生命周期入口分析>中遗留两个问题,包括Application的InitInternal方法执行细节.IIS6和II7经典模式请求管道管理类Appli ...
- ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
原文:ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则 对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象, ...
随机推荐
- Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性
Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...
- 各种数据库连接代码的测试类(java)
测试类: public class Mytest { Connection conn=null; Statement stmt=null; String myDriver="com.mysq ...
- JavaScript,base64加密解密
直接下载吧: http://files.cnblogs.com/files/xiluhua/base64Decode.js
- Git的搭建和使用技巧完整精华版
[Git使用技巧] 1.把一个已经存在于版本库中的文件加入忽略提交文件(.gitignore)中,需要如下代码: git rm --cached [文件路径] 例如: git rm --cached ...
- Codeforces 746D:Green and Black Tea(乱搞)
http://codeforces.com/contest/746/problem/D 题意:有n杯茶,a杯绿茶,b杯红茶,问怎么摆放才可以让不超过k杯茶连续摆放,如果不能就输出NO. 思路:首先,设 ...
- SQL Server 索引和表体系结构(二)
转自:http://www.cnblogs.com/chenmh 非聚集索引 概述 对于非聚集索引,涉及的信息要比聚集索引更多一些,由于整个篇幅比较大涉及接下来的要写的“包含列的索引”,“索引碎片”等 ...
- CI分页,搜索之后翻页不能用问题
最近在学习用php的CI框架写一个自己的CMS,遇到了些问题.其中一个就是CI分页的时候,我的URL带有其他参数,才能查出我想要的数据.于是我翻遍了谷歌度娘,终于找到了解决办法,和我想的差不多,就贴 ...
- 2013 Asia Regional Changchun I 题,HDU(4821),Hash
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4821 解题报告:搞了很久,总算搞出来了,还是参考了一下网上的解法,的确很巧,和上次湘潭的比 ...
- 谷歌Chrome浏览器如何设置网页的默认编码方法
设置->高级->自定义字体->编码->utf-8
- #ifdef __cplusplus extern "C" { #endif
1.在好多程序中我们会遇到下面代码段 #ifdef __cplusplus extern "C" { #endif //c语法代码段 #ifdef __ ...