在Silverlight应用程序中进行数据验证

转载 2011年01月11日 11:05:00

 

概述

众所周知,在ASP.NET应用程序中,我们可以使用验证控件进行数据输入的验证,遗憾的是在Silverlight中并没有提供任何验证控件,但Silverlight对于双向数据绑定还是提供了一些基本的数据验证支持,我们可以在set设置器中定义验证规则,并对于不合法数据抛出异常,最后通过捕获验证错误事件来实现数据的验证。

本文 将介绍在Silverlight应用程序中如何进行数据验证。

准备知识

Silverlight中如下两种情况下,将会触发验证错误:

1.在绑定引擎中执行数据转换时抛出异常

2.在业务实体的set设置器中抛出异常

为了在验证出错时能够接收到通知,我们必须要在绑定对象上设置如下两个属性为true:

ValidatesOnExceptions:告诉绑定引擎当有异常发生时创建一个验证异常

NotifyOnValidationError:告诉绑定引擎当有验证错误发生或者错误排除时触发BindingValidationError事件

这两个属性都定义在Binding类中,如下代码所示:

TerryLee_0154

BindingValidationError事件定义在FrameworkElement中,通过它可以接收到ValidationErrorEventArgs类型的参数,而在ValidationErrorEventArgs中定义了一个很重要的属性Action,它的定义如下:

TerryLee_0155

这里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
;
    }
}

好了,现在来看一下最后的验证效果,如下图所示:

TerryLee_0156

TerryLee_0157

通过这样的方式,我们就可以在Silverlight中对于数据输入做验证 了。

 

技巧:在Silverlight应用程序中进行数据验证

 本文首发于博客园,作者TerryLee,原文地址:技巧:在Silverlight应用程序中进行数据验证概述众所周知,在ASP.NET应用程序中,我们可以使用验证控件进行数据输入的验证,遗憾的是在Si...
  • TerryLeeTech
  • TerryLeeTech
  • 2008年07月30日 00:30
  • 337

Silverlight 应用程序中未处理的错误

SCRIPT5022: Silverlight 应用程序中未处理的错误 代码: 2108 类别: InitializeError 消息: 无法下载初始屏幕或白屏问题...
  • mh942408056
  • mh942408056
  • 2015年07月17日 17:57
  • 1875

在Silverlight中进行基本的数据验证

 Silverlight 2支持基本的数据验证功能。在Silverlight 2中,当我们把数据绑定到某个UI控件的时候,该数据所具有的有效性规则也自动被绑定到了该UI控件上。比如某个数据字段被设置为...
  • SilverlightShanghai
  • SilverlightShanghai
  • 2009年02月25日 13:15
  • 2625

silverlight 应用程序在ASP.NET Web网站或者Web应用程序里部署

silverlight 应用程序在ASP.NET Web网站或者Web应用程序里部署
  • czh4869623
  • czh4869623
  • 2010年11月06日 17:55
  • 730

Silverlight应用程序中未处理的错误代码:2104 类别:InitializeError

在IIS中右击 网站→属性→HTTP头 解决方案:第一步:默认网站--属性-----http头 类别:InitializeError" title="silverlight应用程序中未处理的错误...
  • zxcvbnm32123
  • zxcvbnm32123
  • 2014年12月09日 18:17
  • 2091

silverlight 应用程序中未处理的错误代码:2104 类别:InitializeError 消息:无法下载 iis上部署Silverlight

产生错误:解决方案:第一步:默认网站--属性-----http头第二步:点击mime类型:第三步:点击新建:输入扩展名以及类型: 扩展名:.xamlMIME 类型:application/xaml+x...
  • showrock
  • showrock
  • 2010年07月05日 11:17
  • 2908

使用Visual Studio 2010 创建简单的Silverlight应用程序

Silverlight是创建动态的引人的RIAs(Rich Internet Application)的新方法。这里教你创建简单的Silverlight应用程序。...
  • u012025054
  • u012025054
  • 2014年06月25日 22:22
  • 1255

如何让Silverlight程序可以在浏览器外运行

这是一个很有意思的特性。在Silverlight 3中实现起来很容易,如下面的步骤 选中“允许在浏览器外运行应用程序”,并点击“浏览器外设置”   编译,并且运行   点击右键 ...
  • chen_xizhang
  • chen_xizhang
  • 2009年12月21日 10:46
  • 1443

Silverlight之文件操作

大家都知道在Silverlight中无法直接使用System.IO进行操作文件,当然这个是为了安全考虑,不过Silverlight提供了其他的操作方法,原理近似,同样很简单。 提到Silverligh...
  • jazywoo123
  • jazywoo123
  • 2012年03月21日 09:26
  • 769

使用jsp来实现对表单对象当中的数据进行校验

登录界面 用户名: 年 龄 密 码:
  • qq_34970891
  • qq_34970891
  • 2017年10月30日 17:41
  • 255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Silverlight应用程序中进行数据验证
举报原因:
原因补充:

(最多只允许输入30个字)