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对象, ...
随机推荐
- linux信号机制 - 用户堆栈和内核堆栈的变化【转】
转自:http://itindex.net/detail/16418-linux-%E4%BF%A1%E5%8F%B7-%E5%A0%86%E6%A0%88 此文只简单分析发送信号给用户程序后,用户堆 ...
- Binary Tree Level Order Traversal II
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- 数字转表格标题 Excel Sheet Column Title
#include<string>using namespace std;class Solution {public: string convertToTitle(int n) { ...
- WWDC 2016 总结
一年一次的WWDC,是开发者充值信仰的时刻,今天你的信仰充值了吗?欢迎在本文下面留言吐槽. 有外媒称,这届WWDC苹果将“fun”伪装成“innovation”,的确,看看另两家老对手,微软有黑科技H ...
- easyui datagrid 每条数据后添加操作按钮
easyui datagrid 每条数据后添加“编辑.查看.删除”按钮 1.给datagrid添加操作字段:字段值 <table class="easyui-datagrid" ...
- Houdini Krakatoa Render Plugin
HDK真实个混蛋,都懒得写个解释.凭着函数英文意思猜测.. plugin sample video: 在极其残忍的开发环境,"Particle Voxel Render" 产生了( ...
- [STL][C++]MAP
参考链接:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html map头文件 #include <map> map添加数据: map&l ...
- python:Xml
<data> <country name="Liechtenstein"> <rank updated="yes">2< ...
- 如何在 Eclipse 中连接源码
1:首先在window 中 打开首选项(preferences) 找到如下java -- 已安装的JRE
- python中字符串\r的奇怪问题
示例: 我这里有一字符串: u'北京市工商行政管理局大兴分局\r <a onclick="showJDS(\'fa641bb3be5b44a1b618433833982fee\',\' ...