0

Page.Load で、ラベル、検証するテキストボックス、および 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;
        }

しかし、ボタンを押すと、他のすべてのバリデーター (他の 2 つの必須フィールド バリディエーターと他の 2 つの正規表現バリデーターを取得しました) は、このカスタム バリデーターのみが機能しています。私が提供する関数が実行されないようです!

4

3 に答える 3

1

データベースへのレコードの挿入中に、IsValid を確認します。

if (page.IsValid) 
{
    //insert record
}
else
{
    Response.Write("Input string is incorrect!");
}
于 2013-09-19T09:46:08.077 に答える
0

テキストボックスに書いたときに何が問題を引き起こしたのか信じられない人 - 5555

そして、プログラムがこの行に到達したとき

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

もちろん、減算したい文字が文字列の範囲外にあるという例外が発生します。

そして問題は別です。私のbutton_click関数でも、この行を取得しました

if (page.IsValid) 

データベースに挿入する前に、すべてが問題ないかどうかを確認します。理由はわかりませんが、レコードは args.IsValid=false にもかかわらずデータベース イベントに挿入されます。

于 2013-09-19T09:35:16.867 に答える
0

検証しようとしているときに、テキスト ボックスの内容は空ですか? 空のときに検証するには、ValidateEmptyTextプロパティを設定する必要がありますtrue

于 2013-09-19T08:50:55.740 に答える