2010-05-17 19 views
0

J'ai un radiobuttonlist avec deux éléments, Oui ou Non. Le contrôle radiobuttonlist a un customvalidator qui a besoin d'une fonction de servervalidation et d'une fonction clientvalidation javascript. Pourriez-vous m'aider? La fonction de ce message fonctionne mais seulement quand j'ai choisi l'un des deux listitems, quand aucun listitem n'est sélectionné, la validation saute mon contrôle radiobuttonlist.Customvalidator: Vérifie si radiobuttonlist contient un élément sélectionné

function ValidateRadioButtonList(source, arguments) { 
     var RBL = document.getElementById(source.controltovalidate); 
     var radiobuttonlist = RBL.getElementsByTagName("input"); 
     var counter = 0; 
     var atLeast = 1 
     for (var i = 0; i < radiobuttonlist.length; i++) { 
      if (radiobuttonlist[i].checked) { 
       counter++; 
      } 
     } 
     if (atLeast = counter) { 
      arguments.IsValid = true; 
      return arguments.IsValid; 
     } 
     arguments.IsValid = false; 
     return arguments.IsValid; 
    } 

EDIT: Code pertinent des commentaires

<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btnNormal" 
     CausesValidation="True" /> 
<asp:CustomValidator runat="server" 
     ClientValidationFunction="ValidateRadioButtonList" 
     OnServerValidate="RadioButtonListServerValidation" ID="cvRadioButtonList" 
     Font-Bold="True" Font-Size="Medium" ErrorMessage="Business critical" 
     ControlToValidate="rblBusinessCritical">*</asp:CustomValidator> 
<asp:RadioButtonList ID="rblBusinessCritical" runat="server" RepeatLayout="Flow" 
     RepeatDirection="Horizontal" TabIndex="4"> 
    <asp:ListItem Text="Yes" Value="1" /> 
    <asp:ListItem Text="No" Value="0" /> 
</asp:RadioButtonList> 

code Derrière:

Public Sub RadioButtonListServerValidation(ByVal sender As Object, _ 
      ByVal args As ServerValidateEventArgs) 
    If rblBusinessCritical.SelectedValue = "-1" Then 
     args.IsValid = False 
     cvRadioButtonList.ErrorMessage = "Business critical needed" 
     Exit Sub 
    Else 
     args.IsValid = True 
    End If 
End Sub 

Répondre

2

Avez-vous mis l'ValidateEmptyText Property du CustomValidator à vrai?

modifier: Avez-vous défini la propriété CausesValidation de votre Submit-Button/RadioButtonList sur true? Veuillez fournir du code à partir de votre page ASPX.

+0

Non mais maintenant la propriété ValidateEmptyText est définie sur true et elle ne valide toujours pas lorsque vous cliquez sur le bouton d'envoi. La radiobuttonlist est seulement validée par ma fonction javascript en cliquant sur un des éléments de radiobuttonlist ... –

+0

a édité mon poste ... –

+0

*

0

Voici une autre fonction javascript de clientvalidation j'ai essayé:

function ValidateRadioButtonList(source, arguments) { 
    var RBL = document.getElementById(source.controltovalidate); 
    var radio = RBL.getElementsByTagName("input"); 
    var isChecked = false; 
    for (var i = 0; i < radio.length; i++) { 
     if (radio[i].checked) { 
      isChecked = true; 
      break; 
     } 
    } 
    if (!isChecked) { 
     alert("Please select an item"); 
     arguments.IsValid = false; 
    } 
    arguments.IsValid = true; 
} 
0

Avez-vous besoin d'utiliser côté client?

Voici une solution côté serveur ...

<asp:RadioButtonList id="radTerms" runat="server"> 
    <asp:listitem id="optDisagree" runat="server" value="Disagree" selected="true">I don't agree</asp:ListItem> 
    <asp:listitem id="optAgree" runat="server" value="Agree">I agree</asp:ListItem> 
</asp:RadioButtonList> 

<asp:CustomValidator Display="Dynamic" ErrorMessage="You have to agree to the terms and conditions" ID="cmpTerms" ControlToValidate="radTerms" SetFocusOnError="true" runat="server" OnServerValidate="cmpTermsAccepted_ServerValidate">*</asp:CustomValidator> 

CodeBehind:

protected void cmpTermsAccepted_ServerValidate(Object source, System.Web.UI.WebControls.ServerValidateEventArgs args) 
{ 
    args.IsValid = (args.Value == "Agree"); 
} 
0

Cela devrait fonctionner. Essayer de prendre le contrôle pour valider la propriété du validateur client.

0
<asp:RadioButtonList ID="LocationAccurateRBL" CssClass="radioButtonList" RepeatDirection="Horizontal" RepeatColumns="4" RepeatLayout="Flow" runat="server"> 
          <asp:ListItem Text="Yes" Value="1" /> 
          <asp:ListItem Text="No" Value="0" /> 
         </asp:RadioButtonList> 

<asp:CustomValidator runat="server" ID="CheckBoxRequired" EnableClientScript="true" ControlToValidate="LocationAccurateRBL" 
          ClientValidationFunction="LocationAccurate_ClientValidate" ValidateEmptyText="true" 
          Text="*" ForeColor="Red" ErrorMessage="Please let us know if the location is accurate" SetFocusOnError="true" ValidationGroup="CreateVG" /> 

Et le script, est beaucoup plus court à cause de jquery. Cela fera ce que vous voulez.

<script> 
         function LocationAccurate_ClientValidate(sender, e) { 
          e.IsValid = $("#<%=LocationAccurateRBL.ClientID%> > input").is(':checked'); 
         }       
        </script>