2010-01-31 10 views

risposta

13

È possibile utilizzare validatori personalizzati per questo:

<asp:Textbox id="textbox1" runat="server" /> 
<asp:CustomValidator id="valCustom" runat="server" 
    ControlToValidate="textbox1" 
    ClientValidationFunction="ClientValidate" 
    OnServerValidate="ServerValidate" 
    ErrorMessage="*You can only enter 1" display="dynamic">* 
</asp:CustomValidator> 

<asp:Textbox id="textbox2" runat="server" /> 
<asp:CustomValidator id="valCustom2" runat="server" 
    ControlToValidate="textbox2" 
    ClientValidationFunction="ClientValidate" 
    OnServerValidate="ServerValidate" 
    ErrorMessage="*You can only enter 1" display="dynamic">* 
</asp:CustomValidator> 

<script language="Javascript"> 
    function ClientValidate(source, arguments) 
    { 
    var tb1 = document.getElementById("<%=textbox1.ClientID %>").value; 
    var tb2 = document.getElementById("<%=textbox2.ClientID %>").value; 
    if (tb1 && tb2 || (!tb1 && !tb2)){ 
     arguments.IsValid = false; 
    } else { 
     arguments.IsValid = true; 
    } 
    } 
</script> 

lato server:

protected void ServerValidate(object sender, ServerValidateEventArgs args) 
{ 
    if(string.isNullOrEmpty(textbox1.Text) && string.isNullOrEmpty(textbox2.Text)) 
    args.IsValid = false; 
    else if(!string.isNullOrEmpty(textbox1.Text) && !string.isNullOrEmpty(textbox2.Text)) 
    args.IsValid = false; 
    else 
    args.IsValid = true; 
} 

Se stai usando jQuery prega di commento ... tutto questo può essere molto più pulito.

+1

Basta fare attenzione se si copia il codice di esempio - "dispaly" deve essere "display" (si verifica due volte) – DJDave

+0

Ritengo che questo non funzioni se entrambi sono vuoti: se la casella di testo è vuota, il suo validatore personalizzato non viene attivato . – ChrisW

+0

Trovo che per fare in modo che funzioni (sul lato server) quando entrambi sono vuoti, ho bisogno di usare una singola istanza 'CustomValidator' senza alcuna proprietà' ControlToValidate'. – ChrisW

1

Implementare un Validatore personalizzato e decorare entrambi i TextBox con esso. Se entrambi sono pieni, entrambi si trovano in uno stato di errore.

Problemi correlati