Изменить цвет текстового поля с помощью CustomValidator

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

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

textBoxObj — это объект текстового поля, который я создаю во время выполнения, и это объект, для которого я хочу получить пустую проверку.

CustomValidator customValidatorObj = new CustomValidator();
customValidatorObj.ControlToValidate = textBoxObj.ID;
customValidatorObj.ClientValidationFunction = "changeColorofTextBox";

и я написал небольшой фрагмент Javascript в файле .aspx, который выглядит следующим образом (я еще не написал логику для изменения цвета, просто сделал ее недействительной на данный момент)

<script type="text/javascript">
    function changeColorofTextBox(oSrc, args) {
        if (args.Value.length > 0) {
            args.IsValid = true;
        }
        else {
            args.IsValid = false;
        }
    }
</script>   

В функции нажатия кнопки отправки формы у меня есть эта проверка, если (Page.IsValid), затем отправьте форму. Однако даже если текстовое поле пусто, форма отправляется. Похоже, функция даже не запускается. Есть ли у вас какие-либо указания на то, что я делаю неправильно? Я в порядке с проверкой на стороне клиента или на стороне сервера, в зависимости от того, что работает.

РЕДАКТИРОВАТЬ

Я получил ошибку, я просто должен был сделать это

customValidatorObj.ValidateEmptyText = true;

и он начал работать. Спасибо, я не знал, что класс customValidator не пытается проверить, пуст ли элемент управления.

Но я снова застрял :(

В форме у меня много текстовых полей. Предположим, пользователь ввел текст для 3 текстовых полей и оставил 2 из них пустыми. Как мне найти идентификаторы текстовых полей, чтобы изменить цвет только пустых. или как я могу написать код в javascript, чтобы узнать идентификатор элемента управления во время выполнения?

Я знаю, что мы должны сделать это

document.getElementById(CONTROLIDGOESHERE).style.backgroundColor = "красный";

но как передать значение CONTROLIDGOESHERE в функцию getElementById?

Любые указатели, спасибо.


person user1067334    schedule 12.03.2012    source источник


Ответы (3)


Попробуйте установить customValidatorObj.EnableClientScipt = True

person Darren J. McLeod    schedule 12.03.2012

Предполагая, что вы используете .NET Framework версии 4.0, вы можете объявить свои текстовые поля, используя ClientIDMode="Static". Таким образом, они будут иметь одинаковый идентификатор на стороне клиента и на стороне сервера, например.

<asp:TextBox runat="server" ID="txtName" ClientIDMode="Static" />

Затем вы можете запустить проверку на стороне клиента по нажатию кнопки, объявив кнопку следующим образом:

<input type="submit" id="btnSubmit" onclick="ClientSideValidation(); return false;" value="Save"/>

Функция JavaScript может выглядеть примерно так:

<script type="text/javascript">
    function ClientSideValidation() {
        var txtName = document.getElementById("txtName");
        if (txtName.value.length == 0) {
            txtName.style.background = "#DE0000";
        }
        // Check other text boxes...
    }
</script>
person Malice    schedule 12.03.2012

Спасибо, ребята, я понял это. Этот код делает работу за меня

.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>
person user1067334    schedule 13.03.2012