Ни один из предоставленных ASP.NET средств проверки не позволяет выполнять условную проверку на основе другого элемента управления. Однако вы можете достичь этого, используя CustomValidator, который выполняет проверку на стороне клиента, на стороне сервера или на обоих (как минимум, проверка на стороне сервера рекомендуется). Валидаторы хорошо работают в сочетании с мастерами.
Пример разметки 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 для 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>
Код для поддержки OnServerValidate:
protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args)
{
if (OptionsDropDownList.SelectedValue == "Other")
{
args.IsValid = (OtherTextBox.Text.Trim() != "");
}
}
Обратите внимание, что ваш выбор - реализовать все, что вам нужно. Вы можете полностью пропустить проверку Javascript и удалить этот код и атрибут ClientValidationFunction
. Также обратите внимание, что Javascript ссылается на целевой элемент управления с помощью свойства ClientID. Это необходимо, так как ASP.NET назначает другой идентификатор при выводе страницы, и вы хотите, чтобы он был предоставлен методу Javascript таким образом (просмотрите источник на странице, и вы увидите, что имя элемента управления префикс и т. д.).