2010-11-23 19 views
0

J'ai un contrôle utilisateur qui contient une série de boutons radio et quelques champs de texte. Si un bouton radio spécifique est coché, je veux valider le contenu de deux champs de texte.CustomValidator La fonction Javascript pense que le bouton radio n'est pas coché

Mon balisage de contrôle contient ceci:

<asp:TextBox ID="FromDate" runat="server" Columns="8"></asp:TextBox> 
<asp:TextBox ID="ToDate" runat="server" Columns="8"></asp:TextBox> 
<asp:RadioButton runat="Server" ID="RadioBetween" GroupName="Date" CssClass="date_group_options_control_radio"/> 
<asp:CustomValidator ID="DateValidator" runat="server" Display="Dynamic" ClientValidationFunction="ValidateDateFields_Client" OnServerValidate="ValidateDateFields"></asp:CustomValidator> 

<script type="text/javascript"> 
function ValidateDateFields_Client(source, args) 
{ 
    debugger; 
    var bRadioBetweenSelected = false; 

    var oRadio = document.getElementById('<%=RadioBetween.ClientID%>'); 
    if (oRadio != null && (oRadio.checked == true || oRadio["checked"] == true)) 
    { 
     bRadioBetweenSelected = true; 
    } 

    if (bRadioBetweenSelected) 
    { 
     var oFromDate = document.getElementById('<%=FromDate.ClientID%>'); 
     var oToDate = document.getElementById('<%=ToDate.ClientID%>'); 

     if (oFromDate != null && oToDate != null) 
     { 
      var sFromDate = oFromDate.value; 
      var sToDate = oToDate.value; 

      source.innerHTML = ValidateFromToDate(sFromDate, sToDate, args); 
     } 
     else 
     { 
      args.IsValid = true; 
     } 
    } 
    else 
    { 
     args.IsValid = true; 
    } 
} 
</script> 

ValidateFromToDate ne vérifie que les valeurs et veille à ce qu'ils sont sains d'esprit.

Il ne va jamais dans le chèque parce que je ne peux pas sembler dire si RadioBetween est vérifié ou non. Le code côté serveur, cependant, fonctionne bien (ce qui fait exactement la même chose).

Si je mets manuellement Checked à "true" dans le contrôle, cela fonctionne comme prévu.

Comment puis-je valider ce côté client pour enregistrer un déplacement sur le serveur? Qu'est-ce que je fais mal? Cela devrait être un code assez trivial :-)

Répondre

0

avère que c'est parce que j'ai deux versions du même contrôle dans une seule page. Le caché (au fond d'un dialogue modal) est en conflit avec le principal. La fonction de validation du client est appelée deux fois sur les contrôles du contrôle caché. Pourquoi cela reste à voir, mais lorsque vous commentez la deuxième instance du contrôle, tout fonctionne correctement.

Chaque jour ASP.NET me embrouille :-)

La raison en est question ici: User Control with Client + Server Side CustomValidation; Wrong Client side validator is picked

0

Il n'est pas clair pourquoi vous utilisez le RadioButton. Habituellement, il y a plus d'un RadioButton avec le même nom de groupe. Peut-être que vous avez juste besoin d'un CheckBox?

+0

Oui, il y a 3 boutons radio pour choisir toutes les options de date différents qui sont mutuellement exclusives –

0

Vous pouvez localiser le problème avec l'aide de FireBug ou d'un autre outil de débogage JavaScript. Placez le (s) point (s) de rupture dans votre fonction et voyez quelles valeurs sont insérées dans les variables à chaque étape d'exécution.

+0

Le débogueur pense qu'il est pas vérifié. L'affichage diffère si –