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


    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/90181

    概述

    众所周知,在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 2的文章请参考Silverlight 2 相关文章汇总

    本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/90181

  • 相关阅读:
    poj 3070 矩阵快速乘
    将数字放大显示
    hdu 火车入队 stack
    linq to Entity 数据库除了有主键还有唯一索引,是不是不能更新
    整理:C#写ActiveX, 从代码到打包到签名到发布的示例
    Java—FileOperator
    第二章-递归与分治策略
    第四章-贪心算法
    第五章-回溯法
    Linux中C程序调试、makefile
  • 原文地址:https://www.cnblogs.com/hdjjun/p/1361587.html
Copyright © 2020-2023  润新知