2012-04-10 10 views
1

Ich habe eine ziemlich große ASPX-Formular mit vielen Textfelder und Dropdown-Listen zum Ausfüllen. Die meisten Textfelder haben RequiredFieldValidator Steuerelemente und diese funktionieren gut.CustomValidator Steuerelement funktioniert nicht in. NET

Allerdings habe ich 3 Textfelder für Home, Mobile und Arbeit Telefonnummern. Jedes Textfeld ist optional, aber wenn es ausgefüllt ist, muss der Wert numerisch sein. Ich muss das Format der Telefonnummer zu diesem Zeitpunkt nicht überprüfen, nur sicherstellen, dass es numerisch ist.

Die Client-Seite Code für eines der Felder sieht so aus:

<asp:Label ID="lblWorkPhone" runat="server" AssociatedControlID="txtWorkPhone" Text="<%$ Resources: Registration, WorkPhone %>" /><br /> 
<asp:TextBox ID="txtWorkPhone" runat="server" /> 
<asp:CustomValidator ID="validateWorkPhone" runat="server" 
          ValidationGroup="reg" ControlToValidate="txtWorkPhone" ForeColor="Red" 
          ErrorMessage="<%$ Resources: Registration, HomePhoneNumber %>" 
          Text="<%$ Resources: Registration, RequireMessage %>" 
          onservervalidate="validateWorkPhone_ServerValidate" /> 

Die serverseitige Validierungsmethode ist hier:

protected void validateWorkPhone_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    long temp = 0; 

    long.TryParse(txtWorkPhone.Text, out temp); 

    if (temp == 0) 
    { 
     args.IsValid = false; 
     validateWorkPhone.IsValid = true; 
    } 
    else 
    { 
     args.IsValid = true; 
     validateWorkPhone.IsValid = false; 
    } 
} 

Soweit ich die Server-seitige Validierungsmethode kann sagen, feuert überhaupt nicht. Alle anderen Validierungssteuerelemente auf der Seite scheinen zu funktionieren.

Kann jemand helfen?

+0

Haben Sie versucht, das 'txtWorkPhone'-Steuerelement zur' reg'-ValidationGroup hinzuzufügen? – Widor

+0

Ja, ich habe das auch versucht und es machte keinen Unterschied –

Antwort

1

Sind die clientseitigen Validatoren (wie die RequiredFieldValidators) gültig? Die serverseitigen Validierer werden nur ausgelöst, wenn alle clientseitigen Validierer gültig sind.

EDIT
meisten validators wie RequiredFieldValidator oder RegularExpressionValidator, führen die Validierung sowohl der Client-Seite und Server-Seite. Wenn die clientseitige Validierung fehlschlägt, wird die Übermittlung abgebrochen, sodass eine serverseitige Validierung nicht ausgelöst wird.

Für einen CustomValidator müssen Sie eine clientseitige Validierung explizit hinzufügen, wenn Sie das möchten.

+0

Ich verwende keine Client-Seite Validierung –

+1

Ein RequiredFieldValidator führt clientseitige Validierung nativ durch, so dass Ihr CustomValidator nicht ausgelöst wird, wenn alle anderen Validatoren nicht bestehen. – SouthShoreAK

+0

Danke SouthShoreAK, das war es. Die Validierung beginnt erst, wenn alle anderen Formulare ebenfalls validiert sind. Es ist nicht ideal, da ich hoffte, alle Validierungsnachrichten auf einmal zu erhalten, aber es funktioniert jetzt. Danke noch einmal! –

1

Nun, wenn Sie nur validieren müssen, dass sie numerisch sind, warum nicht stattdessen einen RegexValidator verwenden? Es würde Ihnen eine Reise zum Server ersparen.

MSDN article on the above, mit Liste der häufigsten Regex, einschließlich einer numerischen.

+0

Ich dachte RegEx würde mich zwingen, einen Wert zu haben. Diese Felder sind optional und sollten nur validiert werden, wenn ein Wert eingegeben wird. –

+0

'^ \ d * $' sollte leere oder beliebige Anzahl von Zahlenzeichen erlauben – SouthShoreAK

0

Dieser Beitrag ist schon lange vorbei, aber ich hatte gerade ein ähnliches Problem und beschränkte mich darauf, ein .NET-Fehler zu sein. Mein benutzerdefinierter Validator befand sich in einem Panel, bei dem ich die Sichtbarkeit beim Laden der Seite programmatisch auf "false" und später auf "code" gesetzt hatte, um es auf "true" zu setzen. Für mich sollte das keinen Unterschied machen, aber wenn ich den Standardwert des Panels in der ASPX-Datei auf "false" setze und die Sichtbarkeit im Code nie auf "false" einstellte, funktionierte das Ganze einwandfrei.

Seltsamerweise habe ich eine Abbrechen-Schaltfläche, die die Sichtbarkeit auf false ohne weitere Probleme setzt.

Verwandte Themen