在Silverlight应用程序中进行数据验证
2011-01-11 11:05
211 查看
概述
众所周知,在ASP.NET应用程序中,我们可以使用验证控件进行数据输入的验证,遗憾的是在Silverlight中并没有提供任何验证控件,但Silverlight对于双向数据绑定还是提供了一些基本的数据验证支持,我们可以在set设置器中定义验证规则,并对于不合法数据抛出异常,最后通过捕获验证错误事件来实现数据的验证。本文
将介绍在Silverlight应用程序中如何进行数据验证。
准备知识
Silverlight中如下两种情况下,将会触发验证错误:1.在绑定引擎中执行数据转换时抛出异常
2.在业务实体的set设置器中抛出异常
为了在验证出错时能够接收到通知,我们必须要在绑定对象上设置如下两个属性为true:
ValidatesOnExceptions:告诉绑定引擎当有异常发生时创建一个验证异常
NotifyOnValidationError:告诉绑定引擎当有验证错误发生或者错误排除时触发BindingValidationError事件
这两个属性都定义在Binding类中,如下代码所示:
BindingValidationError事件定义在FrameworkElement中,通过它可以接收到ValidationErrorEventArgs类型的参数,而在ValidationErrorEventArgs中定义了一个很重要的属性Action,它的定义如下:
这里Added表示新增一个验证异常,Removed表示排除了一个验证异常。下面通过一个实例我们看一下如何使用它们进行数据的验证。
实例
首先我们编写一个简单的业务类,由于数据绑定验证只能在双向绑定中,所以这里需要实现INotifyPropertyChanged接口,如下代码所示,在set设置器中我们对于数据的合法性进行检查,如果不合法则抛出一个异常:/// <summary> /// Author:TerryLee /// http://www.cnblogs.com/Terrylee /// </summary> public class Person : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private int _age; public int Age { get { return _age; } set { if (value < 0) throw new Exception ("年龄输入不合法!" ); _age = value ; if (PropertyChanged != null ) { PropertyChanged(this , new PropertyChangedEventArgs ("Age" )); } } } private String _name = "Terry" ; public String Name { get { return _name; } set { if (value .Length < 4) throw new Exception ("姓名输入不合法!" ); _name = value ; if (PropertyChanged != null ) { PropertyChanged(this , new PropertyChangedEventArgs ("Name" )); } } } public void NotifyPropertyChanged(String propertyName) { if (PropertyChanged != null ) { PropertyChanged(this , new PropertyChangedEventArgs (propertyName)); } } }
编写数据绑定,如下代码所示,设置NotifyOnValidationError和ValidatesOnExceptions属性为true,并且定义BindingValidationError事件:
<!-- http://www.cnblogs.com/Terrylee --> < StackPanel Orientation ="Horizontal" Margin ="10"> < TextBox x : Name ="txtName" Width ="200" Height ="30" Text ="{ Binding Name , Mode =TwoWay, NotifyOnValidationError =true, ValidatesOnExceptions =true}" BindingValidationError ="txtName_BindingValidationError"> </ TextBox > < my : Message x : Name ="messageName"></ my : Message > </ StackPanel > < StackPanel Orientation ="Horizontal" Margin ="10"> < TextBox x : Name ="txtAge" Width ="200" Height ="30" Text ="{ Binding Age , Mode =TwoWay, NotifyOnValidationError =true, ValidatesOnExceptions =true}" BindingValidationError ="txtAge_BindingValidationError"> </ TextBox > < my : Message x : Name ="messageAge"></ my : Message > </ StackPanel >
实现BindingValidationError事件,在这里可以根据ValidationErrorEventAction来判断如何进行处理,在界面给出相关的提示信息等,如下代码所示:
/// <summary> /// Author:TerryLee /// http://www.cnblogs.com/Terrylee /// </summary> void txtAge_BindingValidationError(object sender, ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction .Added) { messageAge.Text = e.Error.Exception.Message; messageAge.Validation = false ; } else if (e.Action == ValidationErrorEventAction .Removed) { messageAge.Text = "年龄验证成功" ; messageAge.Validation = true ; } }
好了,现在来看一下最后的验证效果,如下图所示:
通过这样的方式,我们就可以在Silverlight中对于数据输入做验证
了。
相关文章推荐
- 技巧:在Silverlight应用程序中进行数据验证
- 技巧:在Silverlight应用程序中进行数据验证
- 技巧:在Silverlight应用程序中进行数据验证
- 技巧:在Silverlight应用程序中进行数据验证 推荐
- 数据输入验证---Silverlight商业应用程序开发学习笔记(13)
- Silverlight商业应用程序开发学习笔记(13) 数据输入验证---
- 在Silverlight中进行基本的数据验证
- 稳扎稳打Silverlight(59) - 4.0通信之WCF RIA Services: 数据验证
- Silverlight - RIA Services服务端数据验证与本地化
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集
- 稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo, INotifyDataErrorInfo
- 稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo, INotifyDataErrorInfo
- 稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo, INotifyDataErrorInfo
- 稳扎稳打Silverlight(51) - 4.0绑定之数据验证IDataErrorInfo, INotifyDataErrorInfo
- js进行前端数据的验证
- ASP.NET跨应用程序进行 Forms 身份验证
- Silverlight实例教程 - Validation数据验证基础属性和事件(转载)
- 孙其功陪你学之--QT界面程序经过网路与普通的linux应用程序进行数据传送的情况(UDP协议,非TCP协议):
- 如何使用 Web API 来对 MVC 应用程序进行身份验证
- Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary