2012-03-12 2 views
0

Я создаю несколько текстовых полей во время выполнения, и я хотел бы изменить цвет текстового поля, если текстовое поле осталось пустым , и пользователь отправляет форму.Изменение цвета текстового поля с помощью 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), а затем отправьте форму. Однако, даже если текстовое поле пуст, форма отправляется. Кажется, что функция даже не попадает. У вас есть какие-то указания на то, что я делаю неправильно? Я в порядке с проверкой на стороне клиента или на стороне сервера, в зависимости от того, что работает.

EDIT

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

customValidatorObj.ValidateEmptyText = истина;

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

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

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

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

документа .getElementById (CONTROLIDGOESHERE) .style.backgroundColor = "red";

, но как получить значение CONTROLIDGOESHERE, чтобы перейти к функции getElementById?

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

ответ

1

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

1

Предполагая, что вы работаете в .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> 
0

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

.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> 
Смежные вопросы