Как и в обычных формах, в приложениях WebForms проверку можно и нужно делать на стороне не только сервера, но и клиента. Для добавления проверки на ASP странице используется элемент управления (контрол) <asp:CustomValidator></asp:CustomValidator>, а для указания функции проверки на стороне клиента (проверка с помощью Javascript) нужно указать значение параметра контрола ClientValidationFunction.
Пример синтаксиса контрола для проверки:
<asp:CustomValidator id="cuv1" runat="server" ControlToValidate="toMonthCtrl" OnServerValidate="cuv1_ServerValidate" ClientValidationFunction="TextBoxDAddress1Client" ErrorMessage="Конец периода должен быть больше начала"></asp:CustomValidator>
Параметры контрола:
- ControlToValidate – идентификатор контрола, который подлежит проверке;
- OnServerValidate – метод, в котором реализована проверка;
- ClientValidationFunction – название Javascript функции, в которой реализована проверка;
- ErrorMessage – текст сообщения об ошибке.
В рассматриваемом примере ниже на странице размещены 4 выпадающих списка для выбора периода – месяц год начала и месяц год завершения. Значения списков заполняются в codebehind. Требуется реализовать функцию, которая будет проверять, что дата начала запроса меньше даты завершения.
<asp:DropDownList ID="sinceMonthCtrl" runat="server"></asp:DropDownList> <asp:DropDownList ID="sinceYearCtrl" runat="server"></asp:DropDownList> <br /> <asp:DropDownList ID="toMonthCtrl" runat="server"></asp:DropDownList> <asp:DropDownList ID="toYearCtrl" runat="server"></asp:DropDownList>
В целом, функция проверки – обычная функция Javascript, получающая на вход параметры sender и args. Если функция в результате функции args.IsValid равен true, то все ок, если false, то ошибка.
В приложениях WebForms у контролов идентификаторы имеют уникальные GUID'ы, благодаря чему в Javascript ими не просто управлять. Но с помощью синтаксиса ASP это можно сделать. Минус такого решения – проверку нельзя вынести в отдельный JS файл.
function TextBoxDAddress1Client(sender, args) { var sinceMonth = document.getElementById('<%=sinceMonthCtrl.ClientID%>').selectedIndex; var toMonth = document.getElementById('<%=toMonthCtrl.ClientID%>').selectedIndex; var sinceYear = document.getElementById('<%=sinceYearCtrl.ClientID%>').selectedIndex; var toYear = document.getElementById('<%=toYearCtrl.ClientID%>').selectedIndex; args.IsValid = true; if (sinceYear == toYear) { if (sinceMonth > toMonth) args.IsValid = false; } }