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对象, ...
随机推荐
- Android剪切板传递数据传递序列化对象数据
一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...
- http 报文 - 转
1. http 报文 2. HTTP报文
- Java生产者消费者模型
在Java中线程同步的经典案例,不同线程对同一个对象同时进行多线程操作,为了保持线程安全,数据结果要是我们期望的结果. 生产者-消费者模型可以很好的解释这个现象:对于公共数据data,初始值为0,多个 ...
- ThinkPHP跳转与重定向的区别在哪里
跳转: 浏览器认为 : 当前 URL 请求成功 , 重新请求新的 URL . 浏览器会记录当前的 URL 和新的 URL 在请求历史记录中. 回退, 是可以回退到 , 当前的 URL 上的 . ( 无 ...
- 工作上的C/C++相关
LKSnapShot.h的line127某个类的声明中有: public: typedef TClient<LPeer, ACE_DEV_Connector> _TClient; 这种情况 ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- [转]application windows are expected to have a root view controller错误
转载地址:http://blog.sina.com.cn/s/blog_6784e6ea01017jfy.html 最新更正:这个提示几乎不影响编译和运行,可以不用设置. 产生这个提示的操作: ...
- Codeforces Round #336 Marbles
E. Marbles time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard in ...
- poj1703 Find them, Catch them
并查集. 这题错了不少次才过的. 分析见代码. http://poj.org/problem?id=1703 #include <cstdio> #include <cstring& ...
- c++map的用法 分类: POJ 2015-06-19 18:36 11人阅读 评论(0) 收藏
c++map的用法 分类: 资料 2012-11-14 21:26 10573人阅读 评论(0) 收藏 举报 最全的c++map的用法 此文是复制来的0.0 1. map最基本的构造函数: map&l ...