Ninguno de los validadores ASP.NET proporcionan permiten llevar a cabo la validación condicional basada en otro control. Sin embargo, puede lograr esto utilizando un Custom Validator que realice la validación en el lado del cliente, en el lado del servidor o en ambos (como mínimo, se recomienda la validación del lado del servidor). Los validadores funcionan bien en conjunción con los asistentes.
ejemplo ASP.NET marcado:
<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 para 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>
de código subyacente para OnServerValidate:
protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args)
{
if (OptionsDropDownList.SelectedValue == "Other")
{
args.IsValid = (OtherTextBox.Text.Trim() != "");
}
}
Tenga en cuenta que es su elección implementar lo que necesite. Puede omitir completamente la validación de Javascript y eliminar ese código y el atributo ClientValidationFunction
. Además, observe que Javascript se refiere al control objetivo mediante el uso de la propiedad ClientID. Esto es necesario ya que ASP.NET asigna una ID diferente cuando se genera la página y usted querrá que se proporcione al método Javascript de esta manera (vea la fuente en la página y verá que el nombre del control tiene un extra prefijo, etc.).