2010-12-08 6 views
4

Ich habe einen erforderlichen Feldvalidierer, um eine Dropdownliste zu validieren. Diese Dropdownliste ist eine Autopostback-Eigenschaft, und die causevalidation-Eigenschaft ist auf false festgelegt.Validierungsmeldung wird weiterhin angezeigt, wenn eine Autopostback-Dropdownliste ausgelöst wird

das Problem ist, wenn ich das Standardelement auswählen, zeigt die Überprüfungsmeldung, aber die Postback immer noch tun. Und nach dem Postback verschwindet die Nachricht.

hier ist das Snippet von Codes:

<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

Dank an alle, ich endete mit tun, um die Validierung durch rein Javascript. – fengd

Antwort

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

Danke für Ihre Antwort. Aber was ich wissen möchte ist, dass dies ein Fehler von DropDownList und Validator beim Posten ist? – fengd

+0

Das Ergebnis dieses Codes ist die Validierung, aber das OP möchte erreichen, dass die Dropdownliste nicht validiert wird. – AGuyCalledGerald

0

Sehen Sie eine WebForm_DoPostBackWithOptions Methodenaufruf im onchange Ereignis des HTML-Elements oder ein __doPostBack Methodenaufruf? Der erste Aufruf von PageClientValidate() vor dem Ausführen des Postbacks, Sie könnten ein JS-Debugging-Tool verwenden, um den Pfad anzuzeigen, den es nimmt. Da es die Standard-Validierungsgruppe ist, könnte es auch etwas anderes auslösen?

+0

Ich habe auch dieses Problem - versuchte Firebug zu verwenden, um zu sehen, was __doPostBack tut, aber ich konnte nicht scheinen, es auszuarbeiten. Irgendwelche anderen Vorschläge? –

0

Irgendwie verwirrt der Validator hier etwas. Um das Verhalten zu verhindern, gibt es verschiedene Möglichkeiten:

1) Sie können einstellen,

EnableClientScript="false" 

auf dem Validator, was bedeutet, es auf dem Server validiert.

Wenn diese unerwünschten Nebenwirkungen hat (da der Validator von anderen Client-Validatoren "überholt" ist), können Sie dies tun

2) hinzufügen, um dieses Javascript/Jquery-Funktion zur Seite:

function HideValidator() { 

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

und ein Ereignis-Handler der DDL:

onchange="HideValidator();"