Я написал этот код, и я пытаюсь выяснить, что я сделал неправильно с 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>
вместо radioButton.ID, попробуйте radioButton.ClientID – Asdfg
В следующий раз задайте конкретный вопрос в заголовке;) – Yoeri