2012-03-31 14 views

Antwort

6

können Sie einen CustomValidator für diese, aber es gibt Sie etwas brauchen, um zu wissen, dass es zum Laufen zu bringen. Das Problem ist, dass wenn Sie die ControlToValidate Eigenschaft auf dem Validator festlegen, wird es nur ausgelöst, wenn das Steuerelement einen Wert hat. In Ihrer Situation möchten Sie es speziell überprüfen, wenn es keinen Wert hat.

Um dies zu umgehen, legen Sie die Eigenschaft ControlToValidate nicht auf dem Validator fest. Dann müssen Sie in Ihren Client- und Server-Validierungshandlern direkt auf beide Textfelder zugreifen.

In Ihrer Validierungsfunktion Client Sie so etwas tun könnte:

:

protected void OnCustomServerValidate(object source, ServerValidateEventArgs e) 
{ 
    e.IsValid = true; 
    // Don't validate anything if `OtherTextBox` is empty 
    if (OtherTxtBox.Text.Trim() == String.Empty) 
    {     
     return; 
    } 

    // If we got this far then we need to set IsValid to false if the ControlToValidate has no value 
    if (TextBoxToValidate.Text.Trim() == String.Empty) 
    { 
     e.IsValid = false; 
    }    
} 

und Ihre aspx könnte so aussehen:

function OnCustomClientValidate(source, e) { 
    e.IsValid = true; 
    var otherTextBoxValue = $('#<%=OtherTxtBox.ClientID%>').val().trim();    
    if (otherTextBoxValue == '') {     
     return; 
    } 
    var controlToValidateValue = $('#<%=TextBoxToValidate.ClientID%>').val().trim(); 
    if (controlToValidateValue == '') { 
     e.IsValid = false; 
    } 
} 

Ihr Server Validierungsmethode könnte wie folgt aussehen

<asp:TextBox ID="OtherTextBox" runat="server"></asp:TextBox> 
<asp:CustomValidator ID="MyCustomValidator" runat="server" ClientValidationFunction="OnCustomClientValidate" OnServerValidate="OnCustomServerValidate" Display="Dynamic" ErrorMessage="Please enter a value"></asp:CustomValidator> 
<asp:TextBox ID="TextBoxToValidate" runat="server"></asp:TextBox> 

Beachten Sie, dass bei Verwendung dieses Ansatzes nicht validiert wird, wenn die (beabsichtigte) Kontrolle t o validiert werden, verliert den Fokus, weil wir diese Kontrolle nicht spezifiziert haben. Daher wird die clientseitige Validierung ausgelöst, wenn Sie das Formular senden, das Postback wird jedoch abgebrochen, wenn die Validierung fehlschlägt.

+0

Vielen Dank Ihr Vorschlag ist hilfreich :) –

1

Eine der Möglichkeiten, eine solche Validierung durchzuführen, wäre die Verwendung eines benutzerdefinierten Validators. Sie können dann den benutzerdefinierten Validator verbinden, um entweder die Validierungsserverseite oder die Clientseite auszuführen.

Mandatory MSDN-Link: How to: Validate with a Custom Function for ASP.NET Server Controls

Verwandte Themen