也谈vs2005中CustomValidator的使用

来源:互联网 发布:linux stat函数 编辑:程序博客网 时间:2024/06/06 05:32

      数据验证是写程序过程中一个永恒的话题,几乎所有的系统在处理数据的过程中都绕不过去,数据验证的好处自然不用多说,要不然,你也不会千方百计的进行数据验证。

      数据验证分客户端数据验证和服务器端数据验证。用户体提交的信息在客户端页面脚本山的验证称为客户端的数据验证。用户提交的信息在程序所在的服务器端进行的验证称之为服务器端得数据验证。

       这两种验证方式有各自的优缺点。

       客户端数据验证能够快速响应终端用户。如果提交的信息格式有错误,终端用户会尽快知道出了错。当然,因为数据验证在客户端,而不是发送到服务器端,也减少了服务器端得压力。但 客户端的数据验证不太安全,黑客常利用窗体作为有效窗体,从新发送到服务器,导致服务器安全风险。另外,客户端有时候会禁用浏览器上的脚本运行,使验证无效。因此,客户端验证对于客户来说十分方面,但不能作为一种安全机制。

      比骄安全的数据验证当然就是服务器端得数据验证。这种验证发生在服务器上,这些验证不容易被绕过。但是服务器的数据验证速度较慢,想一下,如果一个用户等了10秒,最后被告知一个电子邮件地址不正确,会怎样想?

      实际上,比较好的方法就是先进性客户端的验证,在窗体发送给服务器后,再进行服务器端的验证。这样可以综合两种验证的优点。也避免了简单实用客户端验证的缺点。

      扯了这么多,还没说本文的正题,微软vs2005中数据验证控件实际上还是比较好用的,只是在现在越来越注重用户体验和界面美观,以及新技术的情况下,使用频率不是很多。那我自己来讲,除了刚刚学习asp.net时使用,后来基本不再使用了。昨天重看有关验证控件的知识,发现其实像CustomValidator这种自定义的控件使用起来还是挺方面的,既可以自定义客户端的脚本数据验证,也可以使用服务器端自定义代码的验证,比较使用。

    以下程序是我测试用的,高手略过,新手可以看看。不过学习这个控件,还是建议用msdn

    客户端aspx代码

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>测试自定义验证控件</title>
    <script language="Javascript" type="text/javascript">
    //客户端的自定义脚本,放在CustomValidator中ClientValidationFunction="GetRight"就可以用了
    function GetRight(oSrc,args)//参数一定要正确
    {
      args.IsValid=(args.Value%5==0);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   请输入被5整除的整数 <asp:TextBox ID="txtnum" runat="server"></asp:TextBox>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="GetRight" ErrorMessage="必须输入能被5整除的数字" ControlToValidate="txtnum" Display="dynamic" OnServerValidate="ValidNum" ></asp:CustomValidator>
        <asp:Label ID="Label1" runat="server" ForeColor="Red" Text="请输入正确的格式"></asp:Label><br />
    <asp:Button ID="button1" runat="server" Text="测试" OnClick="button1_Click" />
    </div>
    </form>
</body>
</html>

     cs代码

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void button1_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Label1.Text = "不错,输入有效";
        }
    }
   public void ValidNum(object source, ServerValidateEventArgs args)//参数一定要正确
    {
        try
        {
            int num = int.Parse(txtnum.Text);
            args.IsValid = ((num % 5) == 0);
        }
        catch(Exception ex)
        {
            args.IsValid = false;
        }
    }
}
   

   

原创粉丝点击