Представьте себе сценарий контактной формы, в которой данные собираются и далее передаются по электронной почте на соответствующий адрес. В одном из важных полей запрашивается адрес электронной почты, что очень важно для инструктирования обратного вызова.
Скажем, я проверяю ввод чего-либо, чего угодно, в поле почтового адреса, используя RequiredFieldValidator
; дальнейшая проверка в коде определит, является ли указанный почтовый адрес пригодным для использования или нет.
Учитывая, что обе эти проверки по сути являются валидацией, я просто хотел бы повторно использовать RequiredFieldValidator
из моего кода; возможно ли это?
Например, что-то простое:
MyValidator.Show();
return;
Что я делал в прошлом, так это добавляю Label
к форме и просто использую подобную тактику, только делая элемент управления видимым, когда это необходимо, и возвращая его. В идеале я бы хотел полностью избавиться от этого и просто использовать один элемент управления для вывода моего сообщения об ошибке.
Для идеи текущего кода ниже приведен скелетный листинг, который, как таковой, является концепцией в целом:
На странице:
<asp:TextBox runat="server" ID="MailAddressTextBox" />
<asp:RequiredFieldValidator runat="server" ID="MailAddressValidator" ErrorMessage="Enter a valid mail address" ControlToValidate="MailAddressTextBox" />
<asp:Label runat="server" ID="MailAddressError" Text="Enter a valid mail address" Visible="false" />
И внутри кода:
MailAddress enquirerMail;
try
{
enquirerMail = new MailAddress(MailAddressTextBox.Text);
}
catch
{
MailAddressError.Visible = true;
return;
}
Подводным камнем с подходом скрытия / показа меток ошибок, помимо очевидных дополнительных элементов управления, является поддержание их видимости, а также меток для каждой ошибки или списков сообщений и изменений в коде для отображения .
Кроме того, я хочу избежать нескольких валидаторов, по крайней мере, в данном конкретном случае; RegularExpressionValidator
здесь не будет сокращаться, поскольку все мы знаем, что выбор «лучшего» регулярного выражения для анализа почтовых адресов может быть само по себе подвигом, или, возможно, он будет содержать больше символов, чем фактическое содержимое страницы + разметка.
Другая причина моего отвращения к регулярному выражению, если оно вам понадобится, заключается в том, что, в конечном счете, я должен реализовать вышеупомянутую проверку try / catch независимо от того, что даже «проверенный» адрес может вызвать сбой в конструкторе MailAddress
.
Итак, просто для повторения: Могу ли я активировать / повторно использовать мои валидаторы из-за кода?