2009-09-11 11 views
6

Ho il seguente sul mio sito web.Come convalidare il testo richiesto quando l'opzione "Altro" è selezionata da un elenco a discesa?

Fonte [DropDownList]

Sito

motore di ricerca

Altro

Altre fonti [TextBox]

voglio usare i validatori ASP.Net (Penso che sia il validatore di confronto) così t quando "Altro" è selezionato nell'elenco a discesa e non viene inserito alcun testo, la convalida viene attivata e la pagina non può essere inviata.

È possibile?

Ive ha cercato di impostare il valore dell'opzione "Altro" nel menu a discesa su string.empty e confrontarlo con una casella di testo vuota, ma questo non ha funzionato.

L'intera cosa che ho ereditato è all'interno di un controllo della procedura guidata, altrimenti collegherei qualche script client per attivare personalmente la convalida. Non penso di poterlo fare con un controllo wizard?

Grazie in anticipo.

risposta

9

Nessuno dei ASP.NET fornito validatori consentono di eseguire la convalida condizionale basata su un altro controllo. Tuttavia, è possibile ottenere ciò utilizzando un CustomValidator che esegue la convalida sul lato client, sul lato server o su entrambi (come minimo, è consigliabile la convalida sul lato server). I validatori funzionano bene insieme ai maghi.

esempio ASP.NET markup:

<asp:DropDownList ID="OptionsDropDownList" runat="server"> 
     <asp:ListItem Text="Website" /> 
     <asp:ListItem Text="Search Engine" /> 
     <asp:ListItem Text="Other" /> 
    </asp:DropDownList> 
    <asp:TextBox ID="OtherTextBox" runat="server" /> 
    <asp:CustomValidator ID="custvOptionsDropDownList" runat="server" ControlToValidate="OptionsDropDownList" 
     ValidateEmptyText="true" Display="Dynamic" ClientValidationFunction="validateOtherTextBox" 
     ErrorMessage="This field is required!" OnServerValidate="ValidateOtherTextBox" /> 

Javascript per ClientValidationFunction:

<script type="text/javascript" language="javascript"> 
    function validateOtherTextBox(event, args) { 
     var textbox = document.getElementById('<%= OtherTextBox.ClientID %>').value; 
     if (args.Value == 'Other') 
      args.IsValid = (textbox != ''); 
     else 
      args.IsValid = true; 
    } 
</script> 

code-behind per OnServerValidate:

protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args) 
    { 
     if (OptionsDropDownList.SelectedValue == "Other") 
     { 
      args.IsValid = (OtherTextBox.Text.Trim() != ""); 
     } 
    } 

Nota che è la tua scelta implementare tutto ciò di cui hai bisogno. Puoi saltare completamente la convalida di Javascript e rimuovere quel codice e l'attributo ClientValidationFunction. Inoltre, si noti che Javascript si riferisce al controllo di destinazione utilizzando la proprietà ClientID. Questo è necessario dal momento che ASP.NET assegna un ID diverso quando la pagina viene emessa e vorrà che venga fornita al metodo Javascript in questo modo (visualizza l'origine sulla pagina e vedrai che il nome del controllo ha un extra prefisso ecc.).

0

si controlla quindi l'opzione che nel selezionare in DropDownList come questo

if (ddl.selecteditemindex == 1){ 
if (txtvalue.text == "") 
{ 
alert('you write something if selected other otherwise choose from a list'); 
} 
} 
Problemi correlati