XAF应用开发教程(五)验证模块

数据验证是应用程序开发中使用频率最高的功能模块,本节详细介绍一下XAF中如何使用验证模块。

XAF 验证模块内置了下面的一些验证规则:


验证规则类型


说明

RuleCombinationOfPropertiesIsUnique (RuleCombinationOfPropertiesIsUniqueAttribute) 要求多个属性的值组合在一起时是唯一的.
RuleCriteria (RuleCriteriaAttribute) 要求满足指定的条件. 如:座机或手机必须填写一个。 条件为:坐机 is not null or 手机 is not null
RuleFromBoolProperty (RuleFromBoolPropertyAttribute) 要求指定的boolean类型的属性的值必须为真.比如注册用户时必须选中同意一系列的条款。
RuleIsReferenced (RuleIsReferencedAttribute) 要求必须被引用的.
RuleObjectExists (RuleObjectExistsAttribute) 要求对象是必须存在的.
RuleRange (RuleRangeAttribute) 要求值必须在一定的范围内.
RuleRegularExpression (RuleRegularExpressionAttribute) 要求输入的值必须是满足正则表达式的.
RuleRequiredField (RuleRequiredFieldAttribute) 要求值是必填写的.
RuleStringComparison (RuleStringComparisonAttribute) 要求字符串必须符合某种比较的条件.
RuleValueComparison (RuleValueComparisonAttribute) 要求值必须是符合某种比较条件.
RuleUniqueValue (RuleUniqueValueAttribute) 要求值必须是唯一的.

为了更直观的理解,我们先上一个效果图。从必填验证说起:

如上图所示,在按下了保存、保存关闭、保存新建 按钮之后,会出现一个错误提示信息。同时,在姓名文本框前面会出现一个红色报错的图标。这个效是怎么实现的呢?

 public class 客户........{....................private string _姓名;

        [RuleRequiredField(CustomMessageTemplate ="请填写姓名!")]
        public string 姓名
        {
            get { return _姓名; }
            set { SetPropertyValue("姓名", ref _姓名, value); }
        }...................

我在前面使用的项目中,打开了客户.cs文件,并在客户类的姓名属性上增加了一行

[RuleRequiredField(CustomMessageTemplate ="请填写姓名!")]是的只需要这样一行就可以了。

这样,XAF为我们生成了一条验证规则,规则的名称是自动指定的,一系列相关的也都用了默认值,我们修改一下代码,指定下名称:

[RuleRequiredField("客户姓名必填", DefaultContexts.Save,CustomMessageTemplate ="请填写姓名!")]

第一个参数为规则的名称,DefaultContexts.Save是指在保存这个上下文时才执行验证。

编译后,打开xafml文件,可以看到这么规则的所有信息:

按照左侧红框中的路径,最终点击结点“客户姓名必填”后,右侧出现了此规则的详细信息,其中格式这一分组内的设置都是显示消息类的。可以进行一下汉化。

带有地球图标的,都是需要本地化的属性。

行为一栏中:

InvertResult:反转结果,当设置为True时,即验证的结果如果是没通过,则认为通过,即是否通过的结果取反,这个选项在必填验证是没什么用的,我们不可能做一个验证规则要实现某些属性必须不能填值的。

ResultType:Error,Warning,Information三种,其中:

Error:当不满足验证规则时,报个错误出来,并且不能继续操作程序。上面演示的验证规则就是这样效果了。

Warning:当不满足验证规则时,显示一个警告信息,确认后,继续程序运行。

比如:客户信息中有个地址属性,当然我们是希望填写地址的,如果不填写,有市场活动举行时,我们有一些礼品就没办法寄送给客户。此时,我们可以增加一条这样的规则,但如果确定得不到地址,也只能不填写了,但要提示操作人员。

按下保存时,可以看到地址文本框前面出现了一个黄色感叹号图标。在错误信息提示的位置,出现了一个checkbox,文字是Ignore warnings,当选中了checkbox后,再次按保存时,则不在提示此信息了。

下面我们再来看看将ResultType修改为Information时的效果:

代码:

 private string _地址;
        [RuleRequiredField(ResultType = ValidationResultType.Warning,CustomMessageTemplate ="如果不填写地址,市场活动礼品将无法送达,确认不填写吗?")]
        public string 地址{
            get { return _地址; }
            set { SetPropertyValue("地址", ref _地址, value); }
        }

由于姓名没有填写,触发了必填规则,同时显示出了地址的信息,但可以不去纠正,只是显示出信息。

当,姓名填写了时,地址的消息是不会显示的,此时,点击Validation按钮会看到提示信息:

        private string _地址;
       [RuleRequiredField(ResultType = ValidationResultType.Information,CustomMessageTemplate ="如果不填写地址,市场活动礼品将无法送达,确认不填写吗?")]
        public string 地址{
            get { return _地址; }
            set { SetPropertyValue("地址", ref _地址, value); }
        }

接下来看xafml中规则的 SkipNullOrEmptyValues,这个选项在必填验证时没有意义,但在别的规则中是有意义的,比如:地址必须以“上海市”开头,如果没有填写则不验证,那么把此值设置成True即可。

代码:

 private string _地址;
        [RuleRequiredField(ResultType = ValidationResultType.Information,CustomMessageTemplate ="如果不填写地址,市场活动礼品将无法送达,确认不填写吗?")]
        [RuleStringComparison("地址必须开始于上海市", DefaultContexts.Save, StringComparisonType.StartsWith,"上海市",SkipNullOrEmptyValues =true)]
        public string 地址{
            get { return _地址; }
            set { SetPropertyValue("地址", ref _地址, value); }
        }

如果没有填写地址时,规则并不会生效。保存是直接通过的,这就是SkipNullOrEmptyValues的作用。

TargetContextIDs:这个属性是个字会串,可以随意填写。首先来看一下什么是Context,即上下文:

上下文是指让验证规则生效的一个环境,比如保存数据时,审核数据时,删除数据时,入库时,等等 ,但系统其实只提供了两个默认的上下文环境,我们前面使用了

DefaultContexts.Save 这个枚举,可以看他的定义(我使用的是Reflector查看的):

[Flags]
public enum DefaultContexts
{
    Delete = 2,
    Save = 1
}

可以看到这个枚举是Flags,也就是说,多个值是可以同时使用的。只定义了删除、保存。

系统内置的上下文环境只有这两种,当然我们可以定义自己的上下文环境,请看下一节中的自定义上下文

我们可以看到在xafml的规则中,有很多的属性,其实在代码中这些属性都是可以控制的,在书写Attribute时,我们可以利用VS的智能感知,查看有哪些参数可以设置,对照着XAFML中的信息,就能知道功能了。

原文地址:https://www.cnblogs.com/xyyhcn/p/11719525.html

时间: 2024-08-26 13:49:48

XAF应用开发教程(五)验证模块的相关文章

微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 由于最近比较忙,这个教程没有连续上,我会尽量连载.书节上回,上次我介绍了代公众号调用接口的方法和SDK的使用.不少朋友也都加了QQ群(2489462

Xamarin Anroid开发教程之验证环境配置是否正确

Xamarin Anroid开发教程之验证环境配置是否正确 经过前面几节的内容已经把所有的编程环境设置完成了,但是如何才能确定所有的一切都处理争取并且没有任何错误呢?这就需要使用相应的实例来验证,本节中的内容就来指导读者如何完成验证. Xamarin Anroid下载并加载官方实例 在Xamrin Studio中提供了一些实例程序用于测试和训练程序员.首先启动Xamarin Studio,启动后Xamrain Studio会呈现如图2.72所示的窗口.在Xamarin Studio窗口中,右侧有

ERPSYSTEM开发教程04 框架模块管理

从DEMO程序获知, 框架主程序工程文件里Forms替换为uTangramFramework, 每个模块都有一个TModule子类和一个GetModuleClass导出函数 那么框架是如何进行模块管理的呢? 我们先从模块入手 unit DllOnePlugin; interface uses SysUtils,Classes,uTangramModule,SysModule,RegIntf; Type TUserModule=Class(TModule) private public Const

XAF应用开发教程(一) 创建项目

XAF是DevExpress公司的快速开发框架,全称eXpress Application Framework,是企业信息系统的开发利器,快速开发效果显著,在.net框架中,笔者至今没有找到一款可以与之比较的产品.下面以应用为中心,讲述如何应用XAF. 下载与安装,如果你已经安装好了sqlserver和visual studio,请至http://www.devexpress.com 下载试用版,安装完成后即可体验. 我使用的是vs2015+sqlserver 2014(与vs内置一起的). 一

XAF应用开发教程(七)外观控制模块

很多时候,我们需要按照不同的条件显示不同的效果,在传统的软件开发中,我们会直接使用 控件名称.BackColor,Enable,Visible等属性进行控制. 如果一个业务对象在多处使用,要么我们会去一个地方一个地方的修改,要么会集中代码做个方法进行控制. 在XAF中,就实现了一处控制全局生效的方法. 下面我们来看看外观模块: 上图中展示了几种效果:1,整行红色背景.2,蓝色字体加删除线.3编辑时控件禁用.4.单元格颜色变化. 详细界面中,同样生效了,上面两幅图,一个是web的,一个winfor

XAF应用开发教程(六)控制器

https://www.cnblogs.com/foreachlife/p/xafviewcontrollerAndValidationContext.html 是的,XAF也是MVC结构的,但不仅限于MVC,ViewModel也存在,它是一项复合技术,AOP,ORM,MVC都有. 真实运行的系统中,仅有增删改查功能肯定是远远不够的,ERP.CRM等系统的开发中,有无数的业务逻辑,通常这些都是在控制器中实现的,控制器有两种: ViewController:应用于视图,需要操作视图的数据. Win

XAF应用开发教程(四)应用程序模型

https://www.cnblogs.com/foreachlife/p/xafml.html XAF是重量型框架,确实够重量的,方方面面都做得规规矩矩. 如果看了前面三节,可能会认为,这N多的Attribute到底都是从哪里来的?到底有多少这样的Attribute?如果不够用了怎么办?等着官方开发吗? 好吧,我不是为了解决上面的这些问题的,从另一个角度来看一下我们的应用程序吧! 我们回过头来看看解决方案中的项目都是做些什么用途吧: XAF的默认项目结构中,XCRMDemo.Module中写了

Magento 2开发教程 - 创建新模块

视频在youtube网站国内访问不了,可以使用FQ软件查看. 视频地址:www.youtube.com/embed/[email protected]=1 下面是视频文字介绍: Magento 2系统整体结构是建立在模块的基础上.通常,创建定制的第一步是构建模块. 要创建模块,需要完成以下步骤: 创建模块文件夹 创建 etc/module.xml 文件. 创建 registration.php 文件. 运行 bin/magento setup:upgrade脚本安装新模块 检查模块是否正常工作

XAF应用开发教程(八) 汉化与多国语言支持

https://www.cnblogs.com/foreachlife/p/5067380.html 使用了XAF开发时,汉化是一个比较常的问题. 要实现汉化很简单: 1.在这里下载汉化资源文件.这里演示的版本是15.1.X的 2.文件下载后将:文件解压到目录    <你的项目>\BIN\ 下面. 解压后如下所示: 这一步的功能是:汉化多数控件中的使用的文字资源.这是官方提供的方法,也有些字符串是没有被汉化的.因为DEV支持的语言也不少,也制做了许多国家的语言包.但CN的资源包还没有做完全汉化