• Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成


    摘要:也许大家都已经习惯了使用ASP.NET中的验证控件进行数据有效性的验证,但是验证控件的验证无法与我们的自定义的实体类结合起来,两者属于不同层面的验证。在Enterprise Library 3.0中有了Validation Application Block,可以轻松的实现页面验证与类验证的结合。

     

    1.编写实体类,本文我使用Enterprise Library 3.0 QuickStarts中的例子,采用Atteribute验证的方式(采用配置文件来实现也是一样的),分别设置验证规则集合、错误信息提示等属性,代码如下:

    public class Customer
    {
        
    private string firstName;
        
    private string lastName;
        
    private DateTime dateOfBirth;
        
    private string email;
        
    private int rewardPoints;

        [StringLengthValidator(
    150, Ruleset = "RuleSetA", MessageTemplate="First Name must be between 1 and 50 characters long")]
        
    public string FirstName
        
    {
            
    get return firstName; }
            
    set { firstName = value; }
        }


        [StringLengthValidator(
    150, Ruleset = "RuleSetA", MessageTemplate = "Last Name must be between 1 and 50 characters long")]
        
    public string LastName
        
    {
            
    get return lastName; }
            
    set { lastName = value; }
        }


        [RelativeDateTimeValidator(
    -120, DateTimeUnit.Year, -18, DateTimeUnit.Year, Ruleset = "RuleSetA", MessageTemplate="Must be 18 years old")]
        
    public DateTime DateOfBirth
        
    {
            
    get return dateOfBirth; }
            
    set { dateOfBirth = value; }
        }


        [RegexValidator(
    @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", Ruleset = "RuleSetA")]
        
    public string Email
        
    {
            
    get return email; }
            
    set { email = value; }
        }


        [Int32RangeValidator(
    01000000, Ruleset = "RuleSetA", MessageTemplate = "Rewards points cannot exceed 1,000,000")]
        
    public int RewardPoints
        
    {
            
    get return rewardPoints; }
            
    set { rewardPoints = value; }
        }

    }

    2.添加PropertyProxyValidator控件。在工具箱中添加新项,选择Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet,默认的安装路径为C:\Program Files\Microsoft Enterprise Library 3.0 - January 2007 CTP\Bin,添加完成后可以在工具箱中看到PropertyProxyValidator控件。

    3.编写ASPX页面,如下图所示:

    代码如下:

    <div>
        
    <h3>
            Validation Application Block: ASP.NET Integration QuickStart
    </h3>
        
            
    <table>
                
    <tr>
                    
    <td style=" 100px">
                        First Name:
    </td>
                    
    <td style=" 508px">
                        
    <asp:TextBox ID="firstNameTextBox" runat="server" Width="235px"></asp:TextBox>&nbsp;
                        
    <br />
                    
    </td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px; height: 21px">
                        Last Name:
    </td>
                    
    <td style=" 508px; height: 21px">
                        
    <asp:TextBox ID="lastNameTextBox" runat="server" Width="235px"></asp:TextBox><br />
                        
    </td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px">
                        Date Of Birth:
    </td>
                    
    <td style=" 508px">
                        
    <asp:TextBox ID="dateOfBirthTextBox" runat="server"></asp:TextBox><br />
                        
    </td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px">
                        E-mail:
    </td>
                    
    <td style=" 508px">
                        
    <asp:TextBox ID="emailTextBox" runat="server" Width="235px"></asp:TextBox><br />
                        
    </td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px; height: 25px;">
                        Rewards Points:
    </td>
                    
    <td style=" 508px; height: 25px;">
                        
    <asp:TextBox ID="rewardsPointsTextBox" runat="server"></asp:TextBox><br />
                        
    </td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px">
                    
    </td>
                    
    <td style=" 508px">
                        
    <asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="submitButton_Click" />&nbsp;
                        
    <asp:Label ID="validationResultsLabel" runat="server"></asp:Label></td>
                
    </tr>
            
    </table>
    </div>

    4.在页面上需要验证的地方添加PropertyProxyValidator控件,基本的属性设置如下:

    <cc1:propertyproxyvalidator id="firstNameValidator" runat="server" 

        ControlToValidate
    ="ContolToValidate" 

        PropertyName
    ="PropertyName" 

        RulesetName
    ="RuleSetName" 

        SourceTypeName
    ="ValidationAspNetQuickStart.Customer">

    </cc1:propertyproxyvalidator>

    其中ControlToValidate指定对应的需要验证的控件IDPropertyName指定在实体类中的属性名,RulesetName指定验证规则的名称,SourceTypeName指定实体类型名,当然了你也可以像验证控件一样通过Display属性来指定验证信息的显示方式:NoneStaticDynamicPropertyProxyValidator还有一个很重要的事件OnValueConvert,在事件可以通过做类型转换根据是否抛出异常来判断输入是否正确,以及设置验证提示信息等。添加完PropertyProxyValidator后代码如下:

    <div>
        
    <h1>
            Validation Application Block: ASP.NET Integration QuickStart
    </h1>
        
            
    <table>
                
    <tr>
                    
    <td style=" 100px">
                        First Name:
    </td>
                    
    <td style=" 508px">
                        
    <asp:TextBox ID="firstNameTextBox" runat="server" Width="235px"></asp:TextBox>&nbsp;
                        
    <br />
                    
    <cc1:propertyproxyvalidator id="firstNameValidator" runat="server" 
                        ControlToValidate
    ="firstN
                        ameTextBox"
     
                        PropertyName
    ="FirstName" 
                        RulesetName
    ="RuleSetA" 
                        SourceTypeName
    ="ValidationAspNetQuickStart.Customer">
                    
    </cc1:propertyproxyvalidator>
                    
    </td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px; height: 21px">
                        Last Name:
    </td>
                    
    <td style=" 508px; height: 21px">
                        
    <asp:TextBox ID="lastNameTextBox" runat="server" Width="235px"></asp:TextBox><br />
                        
    <cc1:PropertyProxyValidator ID="lastNameValidator" runat="server" ControlToValidate="lastNameTextBox"
                            PropertyName
    ="LastName" RulesetName="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer"></cc1:PropertyProxyValidator></td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px">
                        Date Of Birth:
    </td>
                    
    <td style=" 508px">
                        
    <asp:TextBox ID="dateOfBirthTextBox" runat="server"></asp:TextBox><br />
                        
    <cc1:PropertyProxyValidator ID="dateOfBirthValidator" runat="server" ControlToValidate="dateOfBirthTextBox"
                            OnValueConvert
    ="dateOfBirthValidator_ValueConvert" PropertyName="DateOfBirth"
                            RulesetName
    ="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer"></cc1:PropertyProxyValidator></td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px">
                        E-mail:
    </td>
                    
    <td style=" 508px">
                        
    <asp:TextBox ID="emailTextBox" runat="server" Width="235px"></asp:TextBox><br />
                        
    <cc1:PropertyProxyValidator ID="emailValidator" runat="server" ControlToValidate="emailTextBox"
                            PropertyName
    ="Email" RulesetName="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer"></cc1:PropertyProxyValidator></td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px; height: 25px;">
                        Rewards Points:
    </td>
                    
    <td style=" 508px; height: 25px;">
                        
    <asp:TextBox ID="rewardsPointsTextBox" runat="server"></asp:TextBox><br />
                        
    <cc1:PropertyProxyValidator ID="rewardPointsValidator" runat="server" ControlToValidate="rewardsPointsTextBox"
                             PropertyName
    ="RewardPoints"
                            RulesetName
    ="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer" OnValueConvert="rewardsPointsValidator_ValueConvert"></cc1:PropertyProxyValidator></td>
                
    </tr>
                
    <tr>
                    
    <td style=" 100px">
                    
    </td>
                    
    <td style=" 508px">
                        
    <asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="submitButton_Click" />&nbsp;
                        
    <asp:Label ID="validationResultsLabel" runat="server"></asp:Label></td>
                
    </tr>
            
    </table>
    </div>

    5.在这里有两个验证器用到了OnValueConvert事件,对应的CS代码如下:

    protected void rewardsPointsValidator_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        
    string value = e.ValueToConvert as string;
        
    try
        
    {
            e.ConvertedValue 
    = Int32.Parse(value);
        }

        
    catch
        
    {
            e.ConversionErrorMessage 
    = "Rewards points is not a valid integer";
            e.ConvertedValue 
    = null;
        }

    }


    protected void dateOfBirthValidator_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
    {
        
    string value = e.ValueToConvert as string;
        
    try
        
    {
            e.ConvertedValue 
    = DateTime.Parse(value, System.Globalization.CultureInfo.CurrentCulture);
        }

        
    catch
        
    {
            e.ConversionErrorMessage 
    = "Date Of Birth is not in the correct format.";
            e.ConvertedValue 
    = null;
        }

    }

    6.运行后,输入错误的数据如下图所示:

    关于Validation Application BlockASP.NET的集成就简单得介绍到这儿。

    注意本文使用的版本是Enterprise Library 3.0 January 2007 CTP版本。

  • 相关阅读:
    MySQL的复制原理及配置
    MySQL Partition分区扫盲
    SQLite3中自增主键
    SQLite3时间函数小结
    MySQL行级锁,表级锁,页级锁详解
    .vimrc & .bashrc 文件配置
    RecursiveDirectoryIterator目录操作类
    InnoDB外键使用小结
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
    关于友谊的天长地久的方法
  • 原文地址:https://www.cnblogs.com/Terrylee/p/enterprise_library_validation_integration_aspnet.html
Copyright © 2020-2023  润新知