Aucun des ASP.NET fourni validateurs permettent d'effectuer la validation conditionnelle basée sur un autre contrôle. Cependant, vous pouvez réaliser ceci en utilisant un CustomValidator qui effectue la validation côté client, côté serveur, ou les deux (au minimum, la validation côté serveur est recommandée). Les validateurs fonctionnent bien avec les assistants.
exemple de balisage ASP.NET:
<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 pour 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 pour OnServerValidate:
protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args)
{
if (OptionsDropDownList.SelectedValue == "Other")
{
args.IsValid = (OtherTextBox.Text.Trim() != "");
}
}
Notez que c'est votre choix pour implémenter tout ce dont vous avez besoin. Vous pouvez complètement ignorer la validation Javascript et supprimer ce code et l'attribut ClientValidationFunction
. Notez également que le JavaScript fait référence au contrôle cible en utilisant la propriété ClientID. Cela est nécessaire car ASP.NET attribue un ID différent lorsque la page est sortie et que vous voulez qu'elle soit fournie à la méthode Javascript de cette manière (voir la source sur la page et vous verrez que le nom du contrôle a un extra préfixe, etc.).