Проблема CustomValidator - PullRequest
       7

Проблема CustomValidator

0 голосов
/ 09 февраля 2011

У меня есть несколько валидаторов ASP.NET на моей странице различных типов, некоторые из которых я отключаю в зависимости от выбора пользователя на странице, используя javascript.

$.each(Page_Validators, function(index, validator) 
       {
           if ($(validator).hasClass("pain")) {

               ValidatorEnable(validator, false);

        }
});

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

 <asp:CheckBoxList id="BodyPartsList" runat="server" RepeatColumns = "2" 
                    Width="1023px">
                    <asp:ListItem Text = "0. Head/headaches" Value = "1"></asp:ListItem>
                    <asp:ListItem Text = "1. Leg(s)" Value = "2"></asp:ListItem>
                    <asp:ListItem Text = "2. Arm(s)" Value = "3"></asp:ListItem>
                    <asp:ListItem Text = "3. Neck" Value = "4"></asp:ListItem>
                    <asp:ListItem Text = "4. Shoulder(s)" Value = "5"></asp:ListItem>
                    <asp:ListItem Text = "5. Low Back" Value = "6"></asp:ListItem>
                    <asp:ListItem Text = "6. Upper Back" Value = "7"></asp:ListItem>
                    <asp:ListItem Text = "7. Feet" Value = "8"></asp:ListItem>
                    <asp:ListItem Text = "8. Hand(s)" Value = "9"></asp:ListItem>
                    <asp:ListItem Text = "9. Other(Describe in &quot;Details of Plan&quot;)" Value = "10"></asp:ListItem>
                </asp:CheckBoxList>

                <asp:CustomValidator ID="PainLocationValidator" runat="server" Display="Dynamic"
                ErrorMessage="Location of pain is required." 
                ClientValidationFunction="checkPainListValidate" 
                ValidationGroup = "OnSave" EnableClientScript= "true" SetFocusOnError= "true" Width = "100%" CssClass = "pain" />



 function checkPainListValidate(sender, args) {

    args.IsValid = true;

    if ($('#<%= BodyPartsList.ClientID %> input:checked').length > 0)
        args.IsValid = true;

    else
        args.IsValid = false;

}

Почему это происходит?Есть ли что-то еще, что я могу сделать, чтобы отключить их?

Спасибо.

1 Ответ

0 голосов
/ 09 февраля 2011

Некоторая aspx-разметка была бы полезна, но в любом случае вот некоторые идеи:

  • отладили ли вы JavaScript, чтобы увидеть, что происходит, если ваш валидатор имеет значение null или у вас есть тип, такой как validatorEnable вместо ValidatorEnable?Получаете ли вы какие-либо ошибки JavaScript?
  • Проверяет ли CustomValidator на сервере или на стороне клиента, я думаю, ValidatorEnable отключит его только на стороне клиента
  • , установив EnableClientScript в значение true
  • Если вы не укажете ControlToValidate, CustomValidator будет проверяться при каждой обратной передаче, независимо от события, которое его вызвало
  • Предоставили ли вы ClientValidationFunction, который вызывается на стороне клиента?
  • отКстати, какой браузер и какой фреймворк вы используете, это ASP.Net-Ajax?
  • Вы пытались отключить его через document.getElementById('<%=MyValidator.ClientID %>').disabled=true;?

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

Я протестировал ваш код и не могу воспроизвести это поведение:

Это моя Javascript-функция для отключения всех валидаторов (отредактированная с учетом вашего класса боли):

 function disablePainValidators() {
     if ((typeof (Page_Validators) != "undefined") && (Page_Validators != null)) {
         var i;
         for (i = 0; i < Page_Validators.length; i++) {
             if(Page_Validators[i].className=='pain')
                 ValidatorEnable(Page_Validators[i], false);
         }
     }
 }
...