2012-03-13 2 views
0

Я написал этот код, и я пытаюсь выяснить, что я сделал неправильно с customValidator, и я получаю эту ошибку. Может ли кто-нибудь помочь мне в этом.Что я делаю неправильно с этим кодом?

В моей форме у меня много переключателей внутри ретранслятора, и я генерирую radioButton.ID на основе некоторых уникальных полей, которые поступают из базы данных. Radiobuttons, которые принадлежат к той же категории, имеют одинаковый GroupName так: (так что моя логика в том, что даже если выбран один RadioButton из этой группы, то группа проверяется) enter code here

radioButton.GroupName = dataRowTemp["QuestionID"].ToString() + dataRowTemp["ControlID"].ToString(); 

У меня есть следующий код в коде позади .aspx.cs файла

CustomValidator customValidator = new CustomValidator(); 
customValidator.ControlToValidate = radioButton.ID; 
customValidator.ClientValidationFunction = "checkRadiobuttonSelection"; 
customValidator.ValidateEmptyText = true; 
customValidator.EnableClientScript = true; 
e.Item.Controls.Add(customValidator); 

и у меня есть следующий код в файле .aspx

<script type="text/javascript"> 
    function checkRadiobuttonSelection(oSrc, args) { 
     args.IsValid = false; 
     var element; 
     var element2; 
     var ctrlid = oSrc.id; 
     var validatorid = document.getElementById(ctrlid); 
     ctrlid = validatorid.controltovalidate; 
     element2 = document.getElementById(ctrlid); 
     for (var i = 0; i < document.forms[0].elements.length; i++) { 
      element = document.forms[0].elements[i]; 
      if (element.type == "radio") { 
       if (element.GroupName == element2.GroupName) { 
        if (element.checked == true) { 
         args.IsValid = true; 
        } 
       } 
      } 
     } 
    }  
</script> 

Когда я выполняю код, я получаю эту ошибку

[HttpException (0x80004005): Control '1' referenced by the ControlToValidate property of '' cannot be validated.] 
    System.Web.UI.WebControls.BaseValidator.CheckControlValidationProperty(String name, String propertyName) +8757509 
    System.Web.UI.WebControls.CustomValidator.ControlPropertiesValid() +35 
    System.Web.UI.WebControls.BaseValidator.get_PropertiesValid() +21 
    System.Web.UI.WebControls.BaseValidator.OnPreRender(EventArgs e) +27 
    System.Web.UI.Control.PreRenderRecursiveInternal() +80 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842 

Любые указатели для меня? Спасибо.

У меня есть аналогичный код для текстовых полей, который отлично работает и корректно проверяет текстовые поля.

Текстовые поля код, который отлично работает

.aspx.cs 

CustomValidator customValidator = new CustomValidator(); 
customValidator.ControlToValidate = textBox.ID; 
customValidator.ClientValidationFunction = "changeColorofTextBox"; 
customValidator.ValidateEmptyText = true; 
customValidator.EnableClientScript = true; 
e.Item.Controls.Add(customValidator); 

.aspx 

<script type="text/javascript"> 
    function changeColorofTextBox(oSrc, args) { 
     if (args.Value.length > 0) { 
      args.IsValid = true; 
     } 
     else { 
      var ctrlid = oSrc.id; 
      var validatorid = document.getElementById(ctrlid); 
      ctrlid = validatorid.controltovalidate; 
      document.getElementById(ctrlid).style.backgroundColor = "Tomato"; 
      args.IsValid = false; 
     } 
    } 
</script> 
+0

вместо radioButton.ID, попробуйте radioButton.ClientID – Asdfg

+0

В следующий раз задайте конкретный вопрос в заголовке;) – Yoeri

ответ

0

Вы не можете использовать ControlToValidate с кнопками радио. Вам нужно задуматься о создании настраиваемого валидатора, для которого this answer должен помочь.

+0

, но элементы управления radioobutton в моем коде генерируются во время выполнения, как указать, к какому элементу управления должен быть привязан CustomValidator ? – user1067334

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