Элементы управления проверки достоверности

152

Одним из наиболее распространенных применений веб-страниц (и причиной появления HTML-дескриптора <form>) является сбор данных. Часто веб-страница запрашивает у пользователя какую-то информацию, а затем сохраняет ее во вспомогательной базе данных. Почти в каждом случае следует проверить достоверность этих данных, чтобы не сохранить бесполезную, неинформативную либо противоречивую информацию, которая позже может вызвать проблемы.

В идеале проверка достоверности пользовательского ввода должна выполняться на стороне клиента, чтобы пользователь был немедленно информирован о проблемах с вводом перед отправкой формы серверу. Корректная реализация такой модели сохраняет серверные ресурсы и ускоряет обратную связь с пользователем. Однако независимо от того, выполняется ли клиентская проверка достоверности, следует также проверять достоверность данных формы и на стороне сервера. В противном случае страница может быть подвержена атаке за счет удаления клиентского JavaScript-кода, проверяющего достоверность ввода, замены ее новой страницей и применения ее для отправки фальшивых данных.

Написание кода проверки достоверности — сложная задача, в особенности из-за различия моделей клиентского программирования (обычно JavaScript) и серверного программирования (в данном случае ASP.NET). Разработчики Microsoft в курсе этого, поэтому в дополнение к набору элементов управления HTML и веб-элементов управления они также разработали набор элементов управления проверкой достоверности.

Эти элементы управления можно объявить в веб-форме, а затем привязать к любому другому элементу управления вводом. После привязки к элементу управления вводом элемент управления проверкой достоверности выполняет автоматическую клиентскую и серверную проверку достоверности. Если соответствующий элемент управления пуст, содержит данные недопустимого типа либо не придерживается определенных правил, элемент управления проверкой достоверности препятствует обратной отправке страницы.

Элементы управления

В состав ASP.NET входит шесть элементов управления проверкой достоверности. Эти элементы выполняют за разработчика приличную часть сложной работы, упрощая процесс проверки и избавляя от необходимости писать длинный код. Даже еще лучше то, что они являются достаточно гибкими для того, чтобы работать со специальными правилами, которые определяет разработчик, что делает код более пригодным для многократного использования и модульным. Ниже приведено краткое описание каждого из них:

RequiredFieldValidator

Контролирует, не пуст ли проверяемый элемент управления при отправке формы.

RangeValidator

Контролирует, находится ли значение связанного элемента управления в пределах определенного диапазона. Значение и диапазон могут быть числом, датой или строкой

CompareValidator

Контролирует, соответствует ли значение данного элемента управления определенной операции сравнения (больше, меньше и т.д.) с другой константой или значением элемента управления

RegularExpressionValidator

Контролирует, соответствует ли значение данного элемента управления определенному регулярному выражению

CustomValidator

Позволяет определить любую клиентскую или серверную операцию проверки достоверности JavaScript для выполнения собственной логики проверки достоверности

ValidationSummary

Отображает итоговую информацию с сообщениями об ошибках для каждого давшего сбой элемента управления проверкой достоверности на странице (или во всплывающем окне сообщения)

Следует отметить, что для одного элемента управления можно использовать сразу несколько элементов управления проверкой достоверности. Например, один элемент управления проверкой достоверности можно настроить на то, чтобы связанный элемент управления ввода был не пуст, а второй — на то, что он содержит данные определенного типа. Фактически при использовании RangeValidator, CompareValidator или RegularExpressionValidator проверка достоверности автоматически пройдет успешно, если элемент управления вводом будет пуст, поскольку значение для проверки отсутствует.

Если требуется другое поведение, к элементу управления следует добавить RequiredFieldValidator. Это обеспечивает выполнение двух типов проверки достоверности, что эффективно отсекает пустые значения.

Несмотря на невозможность проверки достоверности элементов управления RadioButton или CheckBox, можно проверить достоверность TextBox (наиболее распространенный выбор) и других элементов управления, таких как ListBox, DropDownList, RadioButtonList, HtmlInputText, HtmlTextArea и HtmlSelect. При проверке достоверности спискового элемента управления проверяемым свойством является Value выбранного объекта ListItem. Вспомните, что свойство Value является скрытым атрибутом, содержащим информацию на HTML-странице для каждого элемента списка, и в браузере не отображается. Если не использовать атрибут Value, невозможно проверить достоверность элемента управления (проверка достоверности текста выбора не поддерживается).

Формально каждый класс элементов управления содержит опцию назначения одного свойства, которое будет проверяться с использованием атрибута ValidationProperty. Например, если вы создали собственный класс элементов управления FancyTextBox, обозначить свойство Text как свойство, поддерживающее проверку достоверности, можно следующим образом:

[ValidationProperty("Text")] 
public class FancyTextBox : WebControl

Процесс проверки на предмет достоверности

Элементы управления проверкой достоверности могут применяться для проверки страницы как автоматически на этапе ее отправки пользователем, так и вручную в самом коде. Более распространен первый подход.

Когда используется автоматический процесс проверки, пользователь получает обычную страницу и приступает к заполнению отображаемых на ней элементов управления вводом. По завершении он щелкает на какой-нибудь кнопке, чтобы отправить страницу. У каждой кнопки имеется свойство CausesValidation, которое может быть установлено либо в true, либо в false. То, что произойдет после выполнения пользователем щелчка на кнопке, зависит от значения этого свойства.

Свойство CausesValidation предоставляют и многие другие элементы управления кнопочного типа, которые могут применяться для отправки страницы. Например, к их числу относятся такие элементы управления, как LinkButton, ImageButton и BulletedList.

Из этого описания становится понятно, что проверка достоверности выполняется автоматически только при щелчке на кнопках определенных видов. Она не происходит ни в случае отправки страницы из-за какого-нибудь события изменения (вроде выбора нового значения в списке AutoPostBack), ни при выполнении пользователем щелчка на кнопке, свойство CausesValidation которой установлено в false. Однако это не исключает возможности выполнения проверки одного или более элементов управления вручную и принятия решения на основе результатов в коде.

В браузерах, поддерживающих подобное поведение, ASP.NET будет автоматически добавлять код для выполнения проверки достоверности на стороне клиента. В таком случае после щелчка пользователем на кнопке CausesValidation будут появляться точно такие же сообщения об ошибках и без отправки и возврата страницы из сервера.

Это повышает способность приложения к реагированию. Однако в случае успешного прохождения страницей проверки на стороне клиента ASP.NET все равно будет проверять ее еще раз при получении на стороне сервере. Выполнение проверки на обеих сторонах делает приложение настолько быстрореагирующим, насколько возможно, и при этом ничуть не уменьшает степень его безопасности. Лучше всего процесс проверки на стороне клиента работает в веб-браузерах, отличных от Microsoft.

На рисунке показана страница, выполняющая проверку нескольких текстовых полей и в конце выдающая сводную информацию по проведенной проверке. Использованные в этом примере элементы управления проверкой достоверности подробно рассматриваются в последующих разделах:

Пример выполнения проверки на предмет достоверности на странице

Класс BaseValidator

Классы элементов управления проверкой достоверности находятся в пространстве имен System.Web.UI.WebControls и наследуются от класса BaseValidator. Этот класс определяет базовые функции элемента управления проверкой достоверности:

Свойства и методы класса BaseValidator
Свойство или метод Описание
ControlToValidate Указывает на элемент управления вводом, подлежащий проверке
Display Определяет способ отображения сообщения об ошибке. Если установлено в Static, заранее подсчитывается пространство, необходимое для отображения сообщения, и добавляется к компоновке. Если установлено в Dynamic, компоновка страницы будет динамически изменяться для отображения строки ошибок. Следует отметить, что несмотря на кажущуюся пользу способа Dynamic, если компоновка основана на табличных структурах, при динамическом добавлении множества строк будет внесено довольно много изменений, которые могут запутать пользователя
EnabledClientScript Булевское свойство, определяющее, будет ли выполняться проверка достоверности на стороне клиента. По умолчанию установлено в true
Enabled Булевское свойство, позволяющее пользователю включать или отключать элемент управления проверкой достоверности. В отключенном состоянии элемент управления проверкой достоверности, естественно, никакой проверки не выполняет. Это свойство может устанавливаться программно при необходимости создать страницу, динамическим образом принимающую решение о том, что должно проверяться, а что — нет
ErrorMessage Строка ошибки, которая будет отображаться в итоговой информации об ошибках элементом управления ValidationSummary, если таковой присутствует
Text Текст ошибки, который отображается в элементе управления проверкой достоверности, если связанный элемент управления вводом дает сбой при проверке
IsValid Это свойство также обычно читается или устанавливается только из кода сценария (или класса отделенного кода) для определения достоверности значения в заданном элементе управления вводом.
Это свойство можно проверить на сервере после обратной отправки, но если проверка достоверности на стороне клиента активна и поддерживается клиентским браузером, выполнение не перейдет на сервер в случае недостоверного значения. (Иначе говоря, это свойство проверяется только в том случае, если проверка достоверности на стороне клиента не запускалась.)
Обратите внимание, что можно также прочитать свойство Page.IsValid, чтобы узнать результат проверки достоверности всех элементов управления вводом за одно действие. Page.IsValid возвращает true, только если все содержащиеся на странице элементы управления успешно прошли проверку
SetFocusOnError Если равно true, то когда пользователь пытается отправить страницу с недостоверным элементом управления вводом, браузер передает фокус на этот элемент для быстрого исправления значения. (В случае false фокус сохраняет кнопка или элемент управления, на котором был выполнен щелчок для отправки страницы.)
Это свойство работает для проверки достоверности как на стороне клиента, так и на стороне сервера. При наличии нескольких элементов управления проверкой достоверности с SetFocusOnError, установленным в true, и все элементы управления вводом недостоверны, фокус получит первый элемент управления в последовательности
ValidationGroup Позволяет объединять несколько элементов управления проверкой достоверности в одну логическую группу для того, чтобы они могли осуществлять свою проверку отдельно, без вмешательства элементов управления из других групп. Это свойство удобно использовать, когда на веб-странице присутствует несколько отдельных панелей, в каждой из которых имеется собственная кнопка отправки
Validate() Этот метод выполняет повторную проверку элемента управления и соответствующим образом обновляет свойство IsValid. Веб-страница вызывает этот метод автоматически тогда, когда страница отправляется обратно элементом управления CausesValidation. Однако он также может вызываться и в коде (например, если содержимое элемента управления вводом устанавливается программно и требуется проверка его достоверности).

Вдобавок класс BaseValidator содержит другие свойства, такие как BackColor, Font, ForeColor и другие унаследованные (и в некоторых случаях переопределенные) свойства базового класса Label (и классов, от которых он наследуется — WebControl и Control). Каждый производный элемент управления проверкой достоверности добавляет собственные специфические свойства, которые рассматриваются в последующих разделах.

Элемент управления RequiredFieldValidator

Самым простым доступным элементом управления является RequiredFieldValidator, работа которого заключается в проверке того, не является ли данный элемент управления пустым. Например, элемент управления не пройдет проверку, если связанное текстовое поле не имеет содержимого или содержит только пробелы.

В качестве альтернативы вместо проверки пустых значений можно указать значение по умолчанию с использованием свойства InitialValue. В этом случае проверка проходит неудачно, если содержимое элемента управление совпадает с InitialValue (указывая на то, что пользователь не внес никаких изменений).

Ниже приведен пример типичного элемента RequiredFieldValidator:

<asp:TextBox runat="server" Width="200px" ID="Name" />
<asp:RequiredFieldValidator runat="server" ID="ValidateName" ControlToValidate="Name" 
         ErrorMessage="Имя пустое" Display="dynamic">*
</asp:RequiredFieldValidator>

Объявленный здесь элемент управления проверкой достоверности отобразит символ звездочки (*), если текстовое окно Name (Имя) окажется пустым. Этот текст ошибки появляется, когда пользователь пытается отправить форму, щелкая на кнопке с CausesValidation, установленным в true. Он также появляется на стороне клиента в Internet Explorer 5.0 и последующих версиях при переходе на новый элемент управления благодаря клиентскому JavaScript-коду.

Если вы собираетесь поместить определенное сообщение возле проверенного элемента управления, то следует заменить * сообщением об ошибке. (Использовать свойство ErrorMessage не обязательно, оно необходимо лишь в том случае, когда вы собираетесь вывести итоговую информацию по всем ошибкам на странице с применением элемента управления ValidationSummary).

В качестве альтернативы для лучших результатов можно использовать HTML-дескриптор <img> для вывода изображения (например, восклицательного знака в желтом треугольнике) с окном подсказки для сообщения об ошибке.

Элемент управления RangeValidator

Элемент управления RangeValidator проверяет, чтобы введенное значение не выходило за рамки определенного диапазона. Он имеет три специальных свойства: MinimumValue, MaximumValue и Type.

Свойства MinimumValue и MaximumValue определяют диапазон допустимых значений, а свойство Type — тип данных, которые будут вводиться в элементе управления вводом и проверяться на достоверность. Поддерживаемыми значениями являются Currency, Date, Double, Integer и String.

В следующем примере проверяется, чтобы введенная дата находилась в диапазоне между 1 января и 31 декабря 2012 года (здесь даты кодируются в независимом от локали формате "dd/MM/yyyy"; если на веб-сервере используются другие региональные параметры, измените формат даты):

<asp:TextBox runat="server" Width="200px" ID="DayOff" />
<asp:RangeValidator runat="server" ID="ValidateDayOff2" ControlToValidate="DayOff" 
        MinimumValue="01/01/2012" MaximumValue="31/12/2012" Type="Date" 
        ErrorMessage="Значение даты не входит в указанный диапазон" Display="dynamic" 
        SetFocusOnError="True">*
</asp:RangeValidator>

Элемент управления CompareValidator

Элемент управления CompareValidator сравнивает содержащееся в элементе управления значение либо с каким-то фиксированным значением, либо, что встречается гораздо чаще, со значением, содержащимся в другом элементе управления. Это позволяет, например, проверить, что в двух текстовых полях содержатся одинаковые данные, или что значение в одном текстовом поле не превышает максимального значения, указанного в другом поле.

Подобно элементу управления RangeValidator, элемент управления CompareValidator предоставляет свойство Type, в котором указывается тип сравниваемых данных. Помимо этого, он еще также предоставляет свойства ValueToCompare и ControlToCompare, которые позволяют сравнивать значение элемента управления вводом с константным значением или значением другого элемента управления вводом. Использовать можно только одно из этих двух свойств.

Свойство Operator позволяет задать тип операции сравнения, которая должна выполняться. Доступными значениями являются Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual и DataTypeCheck. Значение DataTypeCheck заставляет элемент управления CompareValidator проверять, что введенные данные соответствуют требуемому типу (указанному с помощью свойства Type), и больше не выполнять никаких дополнительных операций сравнения.

В следующем примере введенное значение сравнивается с постоянным значением для проверки того, что указанный возраст больше или равен 18 годам:

<asp:TextBox runat="server" Width="200px" ID="Age" />
<asp:CompareValidator runat="server" ID="ValidateAge" ControlToValidate="Age" 
      ValueToCompare="18" Type="Integer"
      Operator="GreaterThanEqual" ErrorMessage="Вы должны быть старше 18 лет" Display="dynamic">*
</asp:CompareValidator>

В следующем примере сравниваются значения, введенные в двух текстовых полях пароля, для проверки, совпадают ли они:

<asp:TextBox TextMode="Password" runat="server" Width="200px" ID="Password" />
<asp:TextBox runat="server" TextMode="Password" Width="200px" ID="Password2" />

<asp:CompareValidator runat="server" ControlToValidate="Password2" ControlToCompare="Password" Type="String"
         ErrorMessage="Пароли не совпадают" Display="dynamic" ID="Comparevalidator1" Name="Comparevalidator1">
		 <img src="imgError.gif" alt="Пароли не совпадают" />
</asp:CompareValidator>

Этот пример также демонстрирует еще один полезный прием. В предыдущих примерах для обозначения ошибок использовалась звездочка (*). Однако здесь в дескрипторе элемента управления применяется ссылающийся на файл изображения дескриптор <img> для отображения вместо звездочки небольшого восклицательного знака.

Элемент управления RegularExpressionValidator

Элемент управления RegularExpressionValidator является одним из самых мощных средств в наборе инструментов разработчика приложений ASP.NET. Он позволяет проверять текст путем сопоставления с образцом, определенным в регулярном выражении. От разработчика требуется всего лишь установить это регулярное выражение в свойстве ValidationExpression.

Сами по себе регулярные выражения тоже являются мощными инструментами, поскольку позволяют создавать сложные правила, указывающие, какие символы и в какой последовательности (позиция и количество вхождений) могут присутствовать в строке.

Например, следующий элемент управления проверяет, является ли введенное в текстовом поле значение действительным электронным адресом:

<asp:TextBox runat="server" Width="200px" ID="Email" />
<asp:RegularExpressionValidator runat="server" ID="ValidateEmail" 
       ControlToValidate="Email" ValidationExpression=".*@.{2,}\..{2,}"
       ErrorMessage="Некорректный формат E-mail" Display="dynamic">*
</asp:RegularExpressionValidator>

Выражение .*@.{2,}\..{2,} указывает, что проверяемая им строка должна начинаться с определенного количества символов (.*) и содержать символ @, а также еще минимум два символа (для имени домена), точку (защищенную как \.) и, наконец, по крайней мере, еще два символа для расширения домена.

Более подробно регулярные выражения описаны в статье «Регулярные выражения в C#», а ниже показаны наиболее часто используемые регулярные выражения:

Часто используемые регулярные выражения
Содержимое Регулярное выражение Описание
Адрес электронной почты \S+@\S+\.\S+ Определяет электронный адрес, в котором обязательно должен присутствовать символ @ и точка (.), и допускает наличие только непробельных символов
Пароль \w+ Определяет пароль, допускающий любую последовательность словесных символов (букв, пробелов или символов подчеркивания)
Пароль специфической длины \w{4,10} Определяет пароль, который должен состоят не менее чем из 4, но и не более чем из 10 символов
Расширенный пароль [a-zA-Z]\w{4,10} Определяет пароль, в котором, как в пароле специфической длины, может всего присутствовать от 4 до 10 символов. Хитрость состоит в том, что первый символ должен находиться в диапазоне a-z или A-Z (т.е. должен начинаться с обычной буквы)
Еще один расширенный пароль [a-zA-Z]\w*\d+\w* Определяет пароль, начинающийся с буквенного символа, за которым следует ноль или более словесных символов, потом одна или более цифр и затем снова ноль или более словесных символов. Проще говоря, требует, чтобы где-то внутри пароля содержалось число. С помощью аналогичной схемы можно также требовать, чтобы в пароле содержалось как минимум два числа или другой специальный символ
Поле ограниченной длины символов \S{4,10} Определяет строку длиной от 4 до 10 символов (подобно примеру пароля), но позволяет использовать специальные символы (звездочки, амперсанды и т.д.)

Элемент управления CustomValidator

Если описанные выше элементы управления проверкой достоверности являются недостаточно гибкими или мощными и если требуется более сложный или специфический процесс проверки, тогда нужно использовать элемент управления CustomValidator.

Элемент управления CustomValidator позволяет выполнять специальные процедуры проверки как на стороне клиента, так и на стороне сервера. Эти процедуры могут привязываться к нему, чтобы проверка достоверности выполнялась автоматически. Если выполнение проверки не проходит, для свойства Page.IsValid устанавливается значение false, как и случае любого другого элемента управления проверкой достоверности.

Процедуры проверки достоверности, которые CustomValidator должен выполнять на стороне клиента и на стороне сервера, объявляются похожим образом. Те и другие принимают два параметра: ссылку на элемент управления проверкой достоверности, к которому они должны относиться, и специальный целевой объект. Этот объект предоставляет свойство Value, в котором содержится текущее значение связанного элемента управления вводом (значение, подлежащее проверке), и свойство IsValid, которое позволяет определять, является ли введенное значение допустимым.

Например, чтобы проверить, является ли число кратным пяти, можно использовать следующую клиентскую JavaScript-процедуру проверки:

function EmpIDClientValidate(ctl, args) {

   // Значение кратно 5, если остаток от деления на 5 равен 0
   args.IsValid = (args.Value % 5 == 0);
}

Связать этот код с элементом управления так, чтобы процедура проверки на стороне клиента выполнялась автоматически, можно, указав для ClientValidationFunction в качестве значения имя функции (в данном случае — EmpIDClientValidate).

Далее при отправке страницы ASP.NET необходимо инициировать событие CustomValidator.ServerValidate. Это событие нужно обработать с помощью кода на C# так, чтобы оно решало ту же задачу. И хотя JavaScript-логика является необязательной, процедура проверки достоверности на стороне сервера должна быть обязательно добавлена, чтобы проверка выполнялась даже в случае использования клиентом устаревшего браузера (или изменения HTML-кода веб-страницы).

Ниже показан обработчик событий для события ServerValidate. Он выполняет C#-эквивалент приведенной ранее JavaScript-процедуры проверки:

protected void ValidateEmpID2_ServerValidate(object source, ServerValidateEventArgs args)
{
        try
        {
            args.IsValid = (int.Parse(args.Value) % 5 == 0);
        }
        catch
        {
            args.IsValid = false;
        }
}

И, наконец, вот пример использующего эти процедуры дескриптора CustomValidator:

<asp:TextBox runat="server" Width="200px" ID="EmpID" />
<asp:CustomValidator runat="server" ID="ValidateEmpID2" ControlToValidate="EmpID"
             ClientValidationFunction="EmpIDClientValidate"
             ErrorMessage="Значение ID должно быть кратно 5" Display="dynamic" 
             OnServerValidate="ValidateEmpID2_ServerValidate">*
</asp:CustomValidator>

Элемент управления CustomValidator предоставляет еще одно дополнительное свойство, которое называется ValidateEmtpyText и по умолчанию имеет значение false. Однако бывают случаи, когда требуется создать клиентскую функцию, пытающуюся оценивать пустые значения. В таких сценариях для свойства ValidateEmtpyText должно устанавливаться значение true для предоставления аналогичного поведения и обработчику событий на стороне сервера.

Элемент управления ValidationSummary

Элемент управления ValidationSummary никакой проверки не выполняет. Вместо этого он позволяет показывать сводную информацию обо всех возникших на странице ошибках. В этой сводной информации отображается значение ErrorMessage каждого элемента управления проверкой достоверности, которому не удалось успешно пройти проверку. Сводная информация может отображаться как в клиентском окне сообщений JavaScript (в случае установки свойства ShowMessageBox в true), так и на самой странице (при установке свойства ShowSummary в true). Значение true может устанавливаться одновременно для обоих этих свойств, чтобы отобразить итоговую информацию двумя способами, поскольку эти свойства не являются взаимно исключающими.

В случае отображения итоговой информации на странице, с помощью свойства DisplayMode можно выбрать для нее определенный стиль (например, SingleParagraph, List или BulletList). И, наконец, свойство HeaderText позволяет указывать для итоговой информации конкретный заголовок.

Объявление элемента управления ValidationSummary выглядит довольно просто:

<asp:ValidationSummary runat="server" ID="Summary" DisplayMode="BulletList" 
        HeaderText="<b>Пожалуйста, исправьте следующие ошибки: </b>" ShowSummary="true" ShowMessageBox="true" />

На рисунке показан пример, в котором сводная информация отображается в виде маркированного списка как на самой странице, так и в окне сообщения:

Сводная информация по проверке достоверности

Использование проверочных элементов в коде

Свойства элемента управления проверкой достоверности, как и всех остальных серверных элементов управления, могут считываться и изменяться программно. Для доступа ко всем элементам управления проверкой достоверности на странице может проходить по коллекции Validators текущей страницы.

На самом деле этот прием уже был продемонстрирован в примере страницы, которая показывалась на предыдущих рисунках. На той странице отображалось четыре флажка, позволявших тестировать поведение элементов управления проверкой достоверности с помощью различных опций. Выбор того или иного флажка приводил к обратной отправке. Обработчик событий циклически проходил по всем элементам управления проверкой достоверности и обновлял их в соответствии с новыми опциями, как показано ниже:

protected void OptionsChanged(object sender, EventArgs e)
{
        // Просмотреть все элементы управления 
        // проверкой достоверности. 
        foreach (BaseValidator validator in Page.Validators)
        {
            // Включить или отключить элементы управления проверкой 
            // достоверности в зависимости от значения флажка Validators 
            // enabled (chkEnableValidators). 
            validator.Enabled = chkEnableValidators.Checked;

            // Включить или отключить проверку достоверности 
            // на стороне клиента в зависимости от значения флажка 
            // Client-side validation enabled (chkEnableClientSide). 
            validator.EnableClientScript = chkEnableClientSide.Checked;
        }

        // Сконфигурировать сводную информацию по проверке достоверности 
        // на основе значений двух последних флажков
        Summary.ShowMessageBox = chkShowMsgBox.Checked;
        Summary.ShowSummary = chkShowSummary.Checked;
}

Похожий прием можно использовать и для реализации специального процесса проверки достоверности. Базовая идея состоит в добавлении кнопки со свойством CausesValidation, установленным в false. Когда на этой кнопке совершается щелчок, необходимо выполнить вручную проверку всей страницы или только определенных элементов управления проверкой достоверности вызовом метода Validate(). Затем следует просмотреть свойство IsValid и на основе его значения принять решение о том, что делать дальше.

Пройди тесты
Лучший чат для C# программистов