1

J'ai un contrôle usuel qui nécessite une validation de zone. J'ai 2 instances de ce contrôle utilisateur dans une seule page Web. Maintenant, si je clique sur le bouton lors de la première commande, les messages de validation sont envoyés pour 2 contrôles utilisateur. Mais seuls les champs obligatoires de ce contrôle utilisateur doivent être déclenchés. S'il vous plaît pourrait-on résoudre ce problème. Merci MadhaviLes validations de champ obligatoires dans USER CONTROL sont déclenchées dans toutes les instances de ce contrôle utilisateur lorsqu'il est placé plusieurs fois sur une seule page.

Répondre

1

Je pense que vous devez spécifier un attribut validatongroup sur chaque contrôle de validation de champ.

Chaque contrôle d'utilisateur aurait son propre groupe de validation défini.

See here

Une façon de résoudre ce problème est d'exposer une propriété publique sur votre usercontrol que vous pouvez transmettre au nom du groupe de validation.

<uc:mycontrol id=u1 validationgroup="valA" .. /> 
<uc:mycontrol id=u2 validationgroup="valB" .. /> 

Un problème avec cette approche est que vous devez ajouter le groupe de validation à chaque commande de validation au sein de chargement de la page sur le usercontrol.

+0

cela ne fonctionne pas de moi. Il fonctionne pour vous –

0

Je pense que le groupe de validation ne fonctionnera pas .. Comme c'est le même contrôle d'utilisateur mais a chuté 2 fois dans la page. Tout sur la touche, la validation feu sur les deux contrôle utilisateur wh

+0

oui si vous exposer une propriété dans le contrôle de l'utilisateur et le définir lorsque vous définissez le contrôle sur la page d'appel. – Rippo

0
function ValidateRadio(button) 
    { 
var radioOptions = document.getElementById(button.id.split("_")[0] +'_rblPollOptions'); 
var RVPollOptions = document.getElementById(button.id.split("_")[0] +'_RVPollOptions'); 
var options = radioOptions.getElementsByTagName("input"); 
var radioSelected=false; 
    for (j=0; j < options.length; j++) 
       { 
         if(options[j].checked) 
         { 
          radioSelected=true; 
          break; // Found it, proceed to next question 

         } 
    } 
if (!radioSelected) // no option selected 
       {  // warn user, focus question //alert("You did not answer question"); 

         RVPollOptions.style.visibility = "visible"; 
         return false; 
       }  
     } 
</script> 

<asp:RequiredFieldValidator ID="RVPollOptions" runat="server" ControlToValidate="rblPollOptions" 
      ErrorMessage="Select option!"> </asp:RequiredFieldValidator> 
<asp:Button ID="btnPoll" Text="Vote" OnClientClick="javascript:return ValidateRadio(this)" runat="server" OnClick="btnPoll_Click" /> 
3

Si vous n'êtes pas définir la propriété ValidationGroup du RequiredFieldValidator au sein de votre usercontrol puis validation sur le terrain se déclenche chaque fois que le formulaire est soumis, quel que soit le bouton causé la postback .

Si vous souhaitez associer des validateurs spécifiques à des boutons de soumission spécifiques, vous devrez les associer au même groupe Valdiation. Si vous définissez ValidatioGroup dans votre contrôle utilisateur mais que vous constatez que la validation est déclenchée pour toutes les instances du contrôle, vous devrez prendre un attribut de l'instance de contrôle utilisateur et l'incorporer dans ValidationGroup pour vous assurer que l'utilisateur Le contrôle est exclusivement validé pour tout bouton de soumission sur le contrôle.

Voici un exemple:

<asp:TextBox ID="txtTest" runat="server"/> 
<asp:RequiredFieldValidator ID="txtTestReqVal" 
    runat="server" 
    Display="Dynamic" 
    ControlToValidate="txtTest" 
    Text="* Field is required" 
    ValidationGroup="valGroup<%= ClientId %>" 
    CssClass="modelError" 
    /> 
<asp:Button ID="btnSubmit" runat="server" 
    Text="Submit" 
    CausesValidation="true" 
    ValidationGroup="valGroup<%= ClientId %>" 
    /> 

L'astuce ici est la partie <% = ClientId%>. Cela va injecter l'ID unique côté client dans la valeur du groupe de validation. Cela signifie que toute la validation de ces contrôles sera regroupée par l'unique instance unique du contrôle utilisateur. De cette façon, vous pouvez avoir plusieurs instances du même contrôle utilisateur présentes sur la même page mais toutes validées de manière unique.

+1

Je n'ai pas pu définir le groupe de validation comme ceci –

1

faire vos groupes de validation runat = « server »

Ensuite, donner à chacun un groupe de validation unique comme ceci:

string validationGroup = Guid.NewGuid().ToString(); 
txtContactNameValidator.ValidationGroup = validationGroup; 
txtContactNumberValidator.ValidationGroup = validationGroup; 
btnSave.ValidationGroup = validationGroup; 

Cela permettra d'isoler les contrôles utilisateur de l'autre, peu importe combien sont sur la page.

+1

J'ai utilisé la propriété "UniqueID" du paramètre usercontrol pour aider à assigner un groupe de validation unique à chaque instance du contrôle usercontrol. Que fumaient-ils lorsqu'ils l'ont conçu de cette façon? : / – breez