2011-02-08 3 views
0

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

$.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; 

} 

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

Спасибо.

ответ

0

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

  • ты отладил JavaScript, чтобы видеть, что происходит, если валидатор является недействительным или у вас есть тип, как validatorEnable вместо ValidatorEnable ? Вы получаете ошибки javascript?
  • ли CustomValidator проверяет на Сервер- или на стороне клиента, я думаю ValidatorEnable будет только отключить его на стороне клиента
  • установить EnableClientScript истинной
  • Если вы не указать 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); 
     } 
    } 
} 
+0

Благодарности к ответ и некоторые полезные идеи 1. Я не разобрал 1-ю идею 2. Я проверяю ее на стороне клиента, поэтому использую «ClientValidationFunction», см. обновление 3. Я не указываю 'ControlToValidate, потому что это checkboxlist, и я получаю ошибки, если я сделай это. 4. Если вы отключите валидатор, он все равно будет проверяться при каждой обратной передаче? – Victor

+0

@Victor: точка 1 была опечаткой, которую я только частично удалил (пустой текст никогда не проверяется, если вы не установите ValidateEmptyText в true, но это вам не поможет). Я думал, что вы хотите отключить валидатор, так почему вы спрашиваете, будет ли он проверять на обратной стороне? Покажите нам также js-код, в котором вы отключите валидаторы и функцию ClientValidationFunction. Отладка js, чтобы узнать, что произойдет. –

+0

@Tim Да, я пытаюсь отключить валидатор, поэтому просто интересно, почему он все еще активен, и postback никогда не происходит. В этом классе есть несколько валидаторов, и только CustomValidator остается активным. – Victor