我的自定义验证器的servervalidate函数不会触发.net

时间:2013-09-19 08:33:21

标签: asp.net validation

在Page.Load中,我动态添加一个标签,我的文本框应该是valdiated和customvalidator

Label myLabel3 = new Label();
                    myLabel3.ID = "lblEGN" + i.ToString();
                    myLabel3.Text = "EГН";
                    TextBox myTextBox3 = new TextBox();
                    myTextBox3.ID = "txtEGN" + i.ToString();
                    pnlPersonalCard.Controls.Add(myLabel3);
                    pnlPersonalCard.Controls.Add(new LiteralControl("<br />"));
                    CustomValidator cvEGN = new CustomValidator();
                    cvEGN.ID = "cvtxtEGN" + i.ToString();
                    cvEGN.ControlToValidate = "txtEGN" + i.ToString();
                   // cvEGN.ClientValidationFunction = "checkEgn";
                    cvEGN.ServerValidate += serverCheckEgn;
                    cvEGN.ErrorMessage = "Невалидно егн";
                    pnlPersonalCard.Controls.Add(cvEGN);


                    pnlPersonalCard.Controls.Add(myTextBox3);
                    pnlPersonalCard.Controls.Add(new LiteralControl("<br />"));

当然我提供了应该执行的自定义验证功能

protected void  serverCheckEgn(object sender,  ServerValidateEventArgs args) {
            string egn = args.Value;

            if (egn.Length != 10)
                args.IsValid = false;

            int year = Int32.Parse(egn.Substring(0, 2));
            int month = Int32.Parse(egn.Substring(2, 4));
            int day = Int32.Parse(egn.Substring(4, 6));

            if (month >= 40) {
                year += 2000;
                month -= 40;
            } else if (month >= 20) {
                year += 1800;
                month -= 20;
            } else {
                year += 1900;
            }


            string date = year + "/" + month + "/" + day;

            if (!CheckDate(date))
                args.IsValid=false;

            int checkSum = 0;
            int[] weights = new int[9] {2,4,8,5,10,9,7,3,6};

            for (var ii = 0; ii < weights.Length; ++ii) {
                checkSum += weights[ii] * Int32.Parse(egn.Substring(ii,1));
            }

            checkSum %= 11;
            checkSum %= 10;

            if (checkSum != Int32.Parse(egn.Substring(9,1)))
                args.IsValid=false;

            args.IsValid = true;
        }

但是,当我按下我的按钮时,所有其他验证器(我有两个其他的必需场调整器和另外两个regularexpressionvalidator)只能使用这个自定义验证器,似乎我提供的函数不会执行!

3 个答案:

答案 0 :(得分:1)

在插入记录到数据库期间检查IsValid:

if (page.IsValid) 
{
    //insert record
}
else
{
    Response.Write("Input string is incorrect!");
}

答案 1 :(得分:0)

当您尝试验证时,文本框的内容是否为空?要验证何时为空,您需要将ValidateEmptyText属性设置为true

答案 2 :(得分:0)

你不敢相信是什么导致了这个问题 当我在文本框中写 - 5555

以及当程序到达此行时

 int day = Int32.Parse(egn.Substring(4, 6));

我当然得到了我想要减去的字符超出我的字符串范围的异常。

问题是另一个问题。即使在我的button_click函数中,我也得到了这一行

if (page.IsValid) 

在插入数据库之前检查一切是否正常;我不知道为什么,但是通过args.IsValid = false

将记录插入到数据库事件中