2013-09-19 3 views
0

В Page.Load добавить динамически ярлык, мое текстовое поле, которое должно быть valdiated и CustomValidatorservervalidate функция моего валидатора не срабатывают .net

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 />")); 

конечно я предоставить пользовательские функции Validate whichshould быть выполнено

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; 
     } 

Но когда я прижимаюсь кнопка всех остальные validitators (я получил два других valdiators requiredfield и два других RegularExpressionValidator) работают только этот валидатор не кажется, что функция, которую я обеспечиваю Безразлично» t выполнить!

+0

вы можете сказать пример даты ввода –

+0

например - 555; поле очень важно, и данные должны быть действительно точными - это самый важный персональный номер в болгарии для каждого человека. –

+0

Когда элементы управления динамически добавляются на вашу страницу? Динамически добавленные элементы управления не будут вызывать их события, если они не добавлены в Init страницы. – jbl

ответ

1

во время вставки записи в базу данных проверки IsValid:

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

Я уже нашел свою ошибку Все равно спасибо –

0

Является ли содержимое текстового поля пустым, когда вы пытаетесь его проверить? Для того, чтобы проверить, когда пусто вам необходимо установить ValidateEmptyText свойство установлено в true

+0

No! Содержимое текстового поля не пустое. –

0

Ребята вы не можете поверить, что вызвало проблему , когда я пишу в текстовом поле - 5555

и и когда программа достигнет этой линии

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

Я имею в виду исключение, что символ, который я хочу вычитать, находится за пределами диапазона моей строки.

И проблема другая. Даже в моей функции button_click я получил эту строку

if (page.IsValid) 

, чтобы проверить все ли в порядке, прежде чем вставлять в базу данных; Я не знаю, почему, но запись вставляется в случае базы данных, хотя args.IsValid = ложь

Смежные вопросы