- 浏览: 495625 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
本篇我们讨论SL3中的数据验证相关知识。
数据验证只会发生双向绑定的情况下,因为实体类需要实现INotifyPropertyChanged接口。在SL中数据绑定的时候如果遇到没有验证的数据,通常会忽略它。下面的表中,列出在双向绑定的时候,三种类型的错误:
1、不正确的数据。例如:本来是应该数字类型的,不应该输入字符或者其他字符,同时,也不能超出最大值。
2、对象属性的set异常。例如:在属性Id的set中有一个判断,如果有问题就抛出异常。
3、只读属性,你不能进行赋值操作。
如果是上面的错误,你不能忽略他们,因为sl的数据绑定不会给你任何可视化的提示信息。不正确的值保留在绑定控件中,但是没有应用到绑定对象中。
避免这个问题的好办法就是及时的提醒用户,输入有问题。最容易的途径包括:使用绑定对象的两个属性,ValidatesOnExceptions、NotifyOnValidationError,这些都会激活sl的错误提醒事件。
1、ValidatesOnException
ValidatesOnException是实现其他验证的第一步。在你设置ValidatesOnException=true之后,数据绑定将会对任何错误做出响应,不管它是出现在类型转换还是属性的setter。但是,当设置ValidatesOnException=false(默认为false)之后,数据绑定不会提示任何错误。绑定对象没有被更新,错误的值保留在了绑定控件中。
下面是绑定控件的设置例子
这样设置之后,你的控件在双向绑定之后可以进行捕获和显示错误的能力,具有这种能力的控件包括。
- TextBox
- PasswordBox
- CheckBox
- RadioButton
- ListBox
- ComboBox
知识点:验证状态ValidationState包括三种:Valid、InvalidUnfocused、InvalidFocused。
这里我们再一个属性的setter中添加验证,
{
get { return this._intCustomerId; }
set
{
int result;
if (Int32.TryParse(value.ToString(), out result) == false)
throw new ArgumentException("必须是数字");
this._intCustomerId = result;
OnPropertyChanged("CustomerId");
}
}
现在如果用户输入一个非数字的用户Id,setter将会捕获这个异常,因为你设置了ValidatesOnExceptions=true,数据绑定系统将会捕获这个异常,将控件的ValidationState从Valid变成InvalidFocused(如果控件当前获得焦点)或者InvalidUnfocused(如果当前控件失去焦点)。
如上图所示,用户信息是从数据库中读取出来的,我将显示框都换成了输入框,这时候我在123后面添加df,然后焦点从id输入框移出之后,id框外圈会变成红色,这时候ValidationState从Valid变成InvalidUnfocused,因为失去焦点。
这时候当你的焦点回到id框之后,会弹出后面的红色提示信息“输入格式不正确”,也就是你在setter中抛出的异常,这时候ValidationState从Valid变成InvalidFocused,因为又获得焦点。
知识点:如果上面的提示信息太长,会被截断显示,右面显示不下,会显示在左面。
这时候,你发现错误提示很容易也很有用。因为控件使用可视化的错误提示,你简单到只需要考虑显示的信息就可以了。
2、NotifyOnValidationError
在设置ValidatesOnException=true之后,你还是可以选择使用NotifyOnValidationError的。如果你这么做,数据绑定系统会在发现错误之后激活BindingValidationError事件。
Text="{Binding CustomerId, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationErro=true}"/>
BindingValidationError事件会向上抛出,意味着你可以在发生的地方(textbox)捕获,也可以在上一级(包含textbox的grid)进行捕获。发生错误的时候,你可以在不同的级别写代码来处理错误。
上面就是在textbox所在的grid中抛出错误,你可以写代码来进行处理,显示错误信息之类的。但是一般都是改变焦点,重置错误的值,提供一些详细信息,下面的代码提示错误信息,显示了旧值,并且将焦点返回到textbox控件。
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="20" />
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<TextBlock x:Name="LblCustomerId" Grid.Column="0" Grid.Row="0" Text="Customer Id"/>
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Vertical">
<TextBox x:Name="TxtCustomerId" Height="25"
Text="{Binding CustomerId, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=true}"/>
<TextBlock x:Name="lblErrorMessage" Height="30"></TextBlock>
</StackPanel>
<TextBlock x:Name="LblCustomerCode" Grid.Column="0" Grid.Row="1" Text="Customer Code"/>
<TextBox x:Name="TxtCustomerCode" Grid.Column="1" Grid.Row="1" Text="{Binding CustomerCode, Mode=TwoWay, ValidatesOnExceptions=True}"/>
<TextBlock x:Name="LblCustomerName" Grid.Column="0" Grid.Row="2" Text="用户名称"/>
<TextBox x:Name="TxtCustomerName" Grid.Column="1" Grid.Row="2" Text="{Binding CustomerName, Mode=TwoWay, ValidatesOnExceptions=True}"/>
<TextBlock x:Name="LblCustomerType" Grid.Column="0" Grid.Row="3" Text="用户类型"/>
<TextBox x:Name="TxtCustomerType" Grid.Column="1" Grid.Row="3" Text="{Binding CustomerTypeName, Mode=TwoWay, ValidatesOnExceptions=True}"/>
</Grid>
{
lblErrorMessage.Text = e.Error.Exception.Message;
lblErrorMessage.Text += "\nThe stored value is still: " + (((Customer)LayoutRoot.DataContext).CustomerId.ToString());
TxtCustomerId.Focus();
}
BindingValidationError事件只会在控件失去焦点才会被激活,如果你想马上产生效果,你可以使用BindingExpression.UpdateSource();方法来激活事件。
3、Validation Class 验证类
如果你不想用BindingValidationError来发现错误信息,你可以使用验证类Validation的静态方法随时检查绑定控件的错误信息。如果控件验证失败,Validation.GetHasErrors()方法返回true,ValidationGetErrors()方法返回一个只读的错误集合。
这些方法增加了你的灵活性,例如你可以检查Validation.GetHasErrors()方法,如果发现非法数据,可以禁止用户进行下一步操作。
你还可以使用ValidationGetErrors()将所有的错误都返回,显示在一个地方。
4、输入验证
上面提供的都是显示数据之后,你修改的话,会产生验证,下面我们讲一个输入验证的例子。其实就是一个小技巧,输入的时候我们还没有绑定数据的话,就不会产生验证的,因为验证只发生在双向绑定的情况下。
其他我们可以在打开输入页面之后,就绑定一个数据,就是一个空数据,一个刚刚初始化的对象就可以了。
后面的就和前面的一样了。
效果图,输入错误
效果图,输入正确
<Grid.ColumnDefinitions >
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions >
<RowDefinition Height="0.247*" ></RowDefinition>
<RowDefinition ></RowDefinition>
<RowDefinition Height="0.247*" ></RowDefinition>
<RowDefinition Height="0.258*" ></RowDefinition>
<RowDefinition Height="0.258*" ></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="用户类型" Grid.Column="0" Grid.Row="0"></TextBlock>
<ComboBox x:Name="cmbCustomerType" Grid.Column="1" Grid.Row="0"></ComboBox>
<TextBlock Text="用户 Id" Grid.Column="0" Grid.Row="1"></TextBlock>
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Vertical">
<TextBox x:Name="customerId"
Text="{Binding CustomerId, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=true}"
BindingValidationError="customerId_BindingValidationError" LostFocus="customerId_LostFocus">
</TextBox>
<TextBlock x:Name="lblErrorMsg" Height="30"></TextBlock>
</StackPanel>
<TextBlock Text="Custoemr Code" Grid.Column="0" Grid.Row="2"></TextBlock>
<TextBox x:Name="customerCode" Grid.Column="1" Grid.Row="2"></TextBox>
<TextBlock Text="Customer Name" Grid.Column="0" Grid.Row="3"></TextBlock>
<TextBox x:Name="customerName" Grid.Column="1" Grid.Row="3"></TextBox>
<Button x:Name="btnOk" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4" Height="25" Content="添加用户Add Customer"
Click="btnOk_Click"></Button>
</Grid>
首先绑定一个空对象。
AddCustomer.DataContext = new Customer();
然后在验证代码事件中写代码。
private void customerId_LostFocus(object sender, RoutedEventArgs e)
{
BindingExpression expression = customerId.GetBindingExpression(TextBox.TextProperty);
expression.UpdateSource();
}
反正就是扩展一下思路就可以了。
感谢大家的关注!!
本系列的完整代码都可以从http://silverlightwcf.codeplex.com/下载。
数据库的结构如下图:
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 547如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 669组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 528本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5915 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 614前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 836企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 624首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 594概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 996概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 803我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8401 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9691、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 777引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 650oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 605经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 633今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 682我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 699今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 671题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
在Silverlight中,数据验证主要通过数据绑定和验证规则来实现。数据绑定允许UI元素(如文本框)与业务对象的属性进行联动,当用户在界面上输入数据时,这些更改会自动反映到后台对象上。数据验证则是在这个过程中...
本节将深入探讨如何在Core Data中实现数据验证。 首先,Core Data的数据模型(xcdatamodel)定义了实体(Entity)以及它们的属性(Attribute)。在创建属性时,我们可以为每个属性设置基本的数据类型,如字符串、...
本示例“Silverlight用户验证”着重关注如何在Silverlight应用中实现用户输入的验证,确保数据的有效性和安全性。 在Silverlight应用中,用户验证是必不可少的一部分,它能确保用户在提交数据时遵循预设的规则,...
而Bootstrap3-Validation插件则进一步增强了表单功能,允许开发者在用户提交表单前进行数据验证,提高用户体验并减少服务器端的压力。 这个插件的核心是使用JQuery,一个广泛使用的JavaScript库,来处理DOM操作和...
当用户输入的数据未通过验证时,`FormValidation`会自动添加相应的错误类到相关表单元素上,`Bootstrap`的样式会显示红色边框和错误消息,提示用户修正。 要开始使用`FormValidation`,你需要在项目中引入以下依赖...
3. **易于集成**:Validation框架与Android的UI组件(如EditText)和数据绑定库(如Butter Knife或Data Binding)配合良好,可以方便地将验证逻辑与视图层结合。 4. **错误反馈**:当验证失败时,框架可以提供直观...
在Struts2中,Validation框架是用于处理数据验证的重要组件,它允许开发者在用户输入提交到服务器之前或之后进行验证,确保数据的准确性和完整性。下面将详细解释Struts2中的Validation框架及其在前后台验证中的应用...
- **validation-framework.js**:这是Validation JS的核心库文件,包含了一系列验证函数和逻辑。开发者可以通过引入这个文件,利用其提供的API来设置和执行表单验证。 **4. 使用步骤** 1. **引入库**:在HTML文件中...
Python数据验证库 目录 介绍 piva是一个简单而强大的数据验证库 from pyva import Validator validation = Validator ( { 'name' : 'John' , 'age' : 25 }, { 'name' : 'required' , 'age' : ' required|min:...
**JQ validation 表单验证详解** 在网页开发中,用户输入的数据验证是必不可少的一环,它可以确保数据的准确性和一致性,防止恶意输入,提高用户体验。JQuery Validation 插件是一款广泛使用的 JavaScript 库,它...
在Silverlight中,表单验证是一项关键功能,用于确保用户输入的数据符合应用程序设定的规则和标准。这不仅可以提高数据质量,还可以提供更好的用户体验,通过实时反馈错误,指导用户正确填写信息。下面我们将深入...
这样的脚本通常会定义一系列验证规则,如非空检查、邮箱格式验证、电话号码验证等,并且可以在用户提交表单时自动运行这些规则,对输入进行实时检测。 表单长度验证是其中一个重要的功能。在实际应用中,我们可能...
3. **初始化**:在文档加载完成后,调用`$.validationEngine.attach()`方法绑定验证。 ### 三、配置与使用 1. **数据属性**:在需要验证的表单元素上添加特定的数据属性,如`class="validate[required,custom...
【微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证】 微软企业库5.0是微软提供的一套强大的应用程序框架,用于帮助开发者更有效地实现常见的软件开发任务,如日志记录、配置管理、数据...
jQuery Validation Engine是一款强大的JavaScript库,专门用于实现网页表单的验证功能。它是基于流行的JavaScript库jQuery构建的,为开发者提供了一种优雅的方式来处理用户输入的数据验证。这个插件以其高度可定制性...
EasyExcel是一款由阿里巴巴开发的轻量级Java库,专门用于处理Excel数据的读写操作,而Validation则是用于数据验证的一种机制。本文将深入探讨如何结合EasyExcel和Validation实现高效且准确的Excel导入导出与数据校验...
2. **表单验证**:validationEngine主要用于表单验证,确保用户输入的数据符合预设的规则。这些规则可以包括非空检查、长度限制、邮箱格式、数字范围等。通过为表单元素添加特定的class或data-*属性,可以指定验证...
jQuery Validation插件是一款非常强大的前端表单验证工具,它可以帮助开发者轻松地实现对用户输入数据的有效性检查,确保数据的准确性和完整性。这个插件是基于jQuery库构建的,因此在使用之前,你需要先引入jQuery...
TFDV,全称为TensorFlow Data Validation,是Google开源的一个数据验证库,主要用于机器学习项目的数据质量检查和分析。它是TFX(TensorFlow Extended)的一部分,旨在帮助用户在模型训练前理解、清理和验证数据集,...
那么,今天我们就来为大家介绍保证PHP安全的首要措施验证类库,数据的验证是您可能采用的最重要的习惯。而在提及输入时,十分简单:不要相信用户。在保证PHP安全而进行验证数据时,记住设计并验证应用程序允许使用的...