27 мая 2011 г.

ValidationGroup в ASP.NET Web Forms

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

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

Используйте свойство ValidationGroup для каждого контрола (кнопки, текстового поля и валидатора) из одной формы. В качестве значения этого свойства может выступать любой текст. Важно то, что у контролов из одной формы (например, формы обратной связи) это свойство должно быть одинаковым. Тогда при нажатии на кнопку поиска из другой формы, валидатор формы обратной связи нам мешать больше не будет.

Пример реализации формы обратной связи:

<asp:Label ID="Label3" runat="server" Text="Отзыв:"></asp:Label>
<br />
<asp:TextBox ID="txtFeedback" runat="server" Height="150px" TextMode="MultiLine" Width="400px" ValidationGroup="FeedbackGroup"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ID="rfvFeedbackText" runat="server" ControlToValidate="txtFeedback" ErrorMessage="Введите текст отзыва" ValidationGroup="FeedbackGroup"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="btnSubmitFeedback" runat="server" Text="Отправить отзыв" onclick="btnSubmitFeedback_Click" ValidationGroup="FeedbackGroup" />