Что я делаю не так с этим кодом? - PullRequest
0 голосов
/ 13 марта 2012

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

В моем бланке у меня много переключателей внутри повторителя, и я генерирую radioButton.ID на основе некоторых уникальных полей, поступающих из базы данных.Радиокнопкам, принадлежащим к одной и той же категории, присваивается одно и то же имя группы:следующий код в коде файла .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>

1 Ответ

0 голосов
/ 13 марта 2012

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

...