2010-12-08 1 views
4

J'ai un valideur de champ obligatoire pour valider une liste déroulante. cette dropdownlist est une autopostback, et sa propriété causevalidation est définie sur false. Le problème est, lorsque je sélectionne l'élément par défaut, le message de validation s'affiche, mais le reste fait la publication. Et après la publication, le message disparaît.Le message de validation s'affiche toujours lorsqu'une liste déroulante de reprise automatique est déclenchée

est ici l'extrait de code:

<asp:RequiredFieldValidator ID="ContactMethodRequired" runat="server" ControlToValidate="ContactPreferences" 
      Display="Dynamic" ErrorMessage="Please choose your contact method" 
      EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator> 
     <div> 
      <asp:DropDownList ID="ContactPreferences" runat="server" AutoPostBack="true" CausesValidation="false"> 
       <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem>       
       <asp:ListItem Text="Email" Value="Email"></asp:ListItem> 
       <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem> 
      </asp:DropDownList> 
     </div> 
+0

Merci à tous, j'ai fini avec faire la validation par purement javascript. – fengd

Répondre

0
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
<title>Untitled Page</title> 
<script type="text/javascript" language="javascript" > 
function ValidPage() 
    {        
     if (typeof(Page_ClientValidate) == 'function') 
     { 
      if (typeof (Page_ClientValidate) == 'function') { Page_ClientValidate();  } 
      if (!Page_IsValid) 
      {   

       return false; 
      }     
      return Page_IsValid; 
     } 
     return true; 
    } 

</script> 
</head> 
<body > 
    <form id="form1" runat="server" onsubmit="return ValidPage();" > 

     <div> 
      <asp:DropDownList ID="ContactPreferences" runat="server"  AutoPostBack="true" CausesValidation="false"> 
       <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem> 
       <asp:ListItem Text="Email" Value="Email" ></asp:ListItem> 
       <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem> 
      </asp:DropDownList> 


      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="ContactPreferences" 
      Display="Dynamic" ErrorMessage="Please choose your contact method" 
      EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator> 

     </div> 

    </form> 
</body> 
</html> 
+0

Merci pour votre réponse. Mais ce que je veux savoir, c'est que c'est un bug de DropDownList et Validator lors de la publication? – fengd

+0

le résultat de ce code est la validation, mais l'OP veut réaliser que la liste déroulante n'est pas validée. – AGuyCalledGerald

0

Voyez-vous un appel de méthode WebForm_DoPostBackWithOptions en cas onchange de l'élément HTML, ou une méthode __doPostBack appel? Le premier effectue un appel à Page_ClientValidate() avant d'effectuer la publication, vous pouvez utiliser un outil de débogage JS pour voir le chemin qu'il prend. De plus, puisque c'est le groupe de validation par défaut, est-ce que quelque chose d'autre pourrait le déclencher?

+0

J'ai aussi ce problème - essayé d'utiliser Firebug pour voir ce que __doPostBack est en train de faire mais je n'arrive pas à le résoudre. D'autres suggestions? –

0

D'une manière ou d'une autre, le validateur est source de confusion. Pour éviter le comportement, il existe différentes façons:

1) Vous pouvez définir

EnableClientScript="false" 

sur le validateur, ce qui signifie qu'il valide sur le serveur.

Si cela a des effets secondaires indésirables (parce que le validateur est « rattrapée » par d'autres validateurs clients), vous pouvez le faire

2) ajouter cette option javascript/jquery fonction à la page:

function HideValidator() { 

    var validator = $('#<%= ContactMethodRequired.ClientID %>'); 
    validator.hide(); 
} 

et un gestionnaire d'événements à l'ddl:

onchange="HideValidator();" 
Questions connexes