• ASP.net实现信用卡检查和自定义确认控件(二)

    2007-12-11

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://zz2008.blogbus.com/logs/11885226.html

    欢迎来到第二部分.在写完前一部分之后我意识到如果把这些代码更模块化对你将会更有帮助.我说模块化意思是:不用每次应用都要拷贝,粘贴相同的代码.更简单 的方案是建一个继承了.net服务端控件功能的自定义控件.这不仅可使我们定制一些我们想做的事件,而且利用了被继承控件里已有的强大的功能.

    我们来建立一个信用卡认证控件.首先我们需要继承Basevalidator''''s的功能.当然你可以自己写,但那不是一个严格意义上的自定义控件,不是吗?不仅如此而且会 占用你的很多时间.因此使用现成的东西对我们来说更划算.现在我们就开始吧. 首先,我们建个包含我们控件功能的类文件.

     


    1:     using System;
    2: using System.Web.UI;
    3: using System.Web.UI.WebControls;
    4:
    5: namespace CustomValidators
    6: {
    7: /// <summary>
    8: /// Summary description for Class1.
    9: /// </summary>
    10:
    11: //-- 从 BaseValidator 类继承过来, 从而可以基类的一些功能.
    12: public class CreditCardValidator : BaseValidator
    13: {
    14: protected override bool EvaluateIsValid()
    15: {
    16: //-- 把validation 控件的 controltovalidate 值赋给valueToValidate.
    17: string valueToValidate = this.GetControlValidationValue(this.ControlToValidate);
    18: int indicator = 1; //-- 每隔一位数的标记
    19: int firstNumToAdd = 0; //-- 用来储存第一组数字的和
    20: int secondNumToAdd = 0; //-- 用来储存第二组数字的和
    21: string num1; //-- 用于当每隔一位数相加的和大于10时,储存最左边的整数
    22:
    23: string num2; //-- 用于当每隔一位数相加的和大于10时,储存最右边的整数
    24:
    25:
    26: //-- 把信用卡号字符串转换为一个字符数组
    27: char[] ccArr = valueToValidate.ToCharArray();
    28:
    29: for (int i=ccArr.Length-1;i>=0;i--)
    30: {
    31: char ccNoAdd = ccArr[i];
    32: int ccAdd = Int32.Parse(ccNoAdd.ToString());
    33: if (indicator == 1)
    34: {
    35: //-- 当我们碰到奇数位时,将它加入到总值里
    36: firstNumToAdd += ccAdd;
    37: //-- 将标记设为0,使下一次循环跳过此程序段
    38: indicator = 0;
    39: }
    40: else
    41: {
    42: //-- 如果当前整数乘以2之后大于10,就将和分为两个整数并将它们相加,
    43: //-- 相加的值再加到总值里.
    44:
    45: if ((ccAdd + ccAdd) >= 10)
    46: {
    47: int temporary = (ccAdd + ccAdd);
    48: num1 = temporary.ToString().Substring(0,1);
    49: num2 = temporary.ToString().Substring(1,1);
    50: secondNumToAdd += (Convert.ToInt32(num1) + Convert.ToInt32(num2));
    51: }
    52: else
    53: {
    54: //-- 否则,将它们相加,相加的值再加到总值里.
    55: secondNumToAdd += ccAdd + ccAdd;
    56: }
    57: //-- //-- 将标记设为1,我们就能对下一个整数执行不同的代码
    58:
    59: indicator = 1;
    60: }
    61: }
    62: //-- 如果两个数的和被10整除,那么卡是有效的,否则,无效.
    63:
    64: bool isValid = false;
    65: if ((firstNumToAdd + secondNumToAdd) % 10 == 0)
    66: {
    67: isValid = true;
    68: }
    69: else
    70: {
    71: isValid = false;
    72: }
    73: return isValid;
    74: }
    75: }
    76: }
    77:


    接下来,将它保存为Validator.cs 在你的项目文件夹里.现在,为了能使用它,我们把它编译成dll.做这些你可以建一个批处理文件(.bat),也可以打开windows命令行输入以下字符:

    csc /target:library /out:c:\inetpub\wwwroot\bin\Validator.dll *.cs /r:System.dll,System.Web.dll

    有了dll文件你就可能使用这个控件了.随便打开一个你喜欢的编辑器,输入以下代码:

      


    1:     <%@ Register TagPrefix="custom" Namespace="CustomValidators" Assembly="Validator" %>
    2:
    3: <html>
    4: <body>
    5: <form runat="server">
    6: <asp:TextBox ID="CCNumber" Runat="server" />
    7: <custom:CreditCardValidator
    8: ControlToValidate="CCNumber"
    9: Runat="server"
    10: ErrorMessage="Credit Card Number Invalid!" />
    11: <asp:Button Text="Validate" Runat="server" />
    12: </form>
    13: </body>
    14: </html>


      保存并访问此页,输入一个测试的信用卡号码,好了,你现在已明白如何在ASP.NET中定制控件了. 


    收藏到:Del.icio.us