CustomValidator问题

时间:2011-02-08 21:41:29

标签: asp.net customvalidator

我的各种类型的页面上有许多ASP.NET验证器,其中一些我根据用户在页面上的选择禁用,使用javascript。

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

               ValidatorEnable(validator, false);

        }
});

这似乎有效,验证器在所有情况下都不会触发,除非我不能使用其他验证器类型时使用的任何CustomValidator

 <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 :(得分:0)

一些aspx-markup会有所帮助,但无论如何这里有一些想法:

  • 您是否已调试javascript以查看正在发生的情况,如果验证程序为空或您的类型为validatorEnable而不是ValidatorEnable?你有任何javascript错误吗?
  • CustomValidator是在服务器上还是在客户端验证,我认为ValidatorEnable只会在客户端禁用它
  • EnableClientScript设为true
  • 如果您未指定ControlToValidate,则CustomValidator将在每次回发时进行验证,而不管导致它的事件是什么
  • 您是否提供了在客户端调用的ClientValidationFunction
  • 顺便说一下,你使用的浏览器和框架是ASP.Net-Ajax?
  • 你试过通过document.getElementById('<%=MyValidator.ClientID %>').disabled=true;禁用它吗?

我假设你使用了错误的ID来获取客户端的验证器。

我已经测试了您的代码,无法重现此行为:

这是我的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);
         }
     }
 }