Файл: Методические указания по практическим работам для обучающихся пи (филиала) дгту в г. Таганроге по специальности (направлению) 09. 02. 07 Информационные системы м программирование.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 379
Скачиваний: 11
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Плановый баланс материальных ресурсов
Источники ресурсов | Сумма, руб. | Распределение ресурсов | Сумма, руб. |
Остаток на начало года | | Текущее потребление | |
Поступление материалов от поставщика | | Реализация на сторону | |
Прочие поступления | | Остаток на конец года | |
Итого | | Итого | |
Баланс | | Баланс | |
График денежных поступлений и выплат
| Остаток на начало месяца | Поступле-ние выручки | Поступле-ние от реализации материалов | Поступле-ние от реализации основных средств | Выплата зарплаты | Уплата налогов | Оплата поставщикам за материалы | Остаток на конец мес. |
01 | | | | | | | | |
02 | | | | | | | | |
03 | | | | | | | | |
04 | | | | | | | | |
05 | | | | | | | | |
06 | | | | | | | | |
07 | | | | | | | | |
08 | | | | | | | | |
09 | | | | | | | | |
10 | | | | | | | | |
11 | | | | | | | | |
12 | | | | | | | | |
Итого: | - | | | | | | | - |
Плановый баланс денежных средств
Источники ресурсов | Сумма, руб. | Распределение ресурсов | Сумма, руб. |
Остаток на начало года | | Оплата поставщикам | |
Поступление выручки | | Прочие выплаты | |
Прочие поступления | | Остаток на конец года | |
Итого | | Итого | |
Баланс | | Баланс | |
Практическая работа № 8«Проверки на стороне клиента»
Цель: - научиться проводить проверки на стороне клиента
Форма отчета:
−выполнить задание;
−показать преподавателю;
−ответить на вопросы преподавателя.
Время выполнения: 2 ч
Для пересылки своих параметров в JavaScript код атрибут должен поддерживать интерфейс IClientValidatable, определенный в пространстве имен System.Web.Mvc. При это необходимо реализовать всего лишь один метод GetClientValidationRules(), который возвращает перечень правил. Каждое правило включает список значений для настройки функции проверки и соответствующего сообщения об ошибке.
Откроем исходный код класса EqualAttribute и добавим поддержку указанного интерфейса. С помощью редактора Visual Studio создадим заготовку его метода и добавим в неё следующий код:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 | namespace MVCDemo.Attributes.Validation { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class EqualAttribute : ValidationAttribute, IClientValidatable { private readonly object _valueToCompare; ......... #region IClientValidatable Members public IEnumerable ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientValidationRule() { ErrorMessage = this.FormatErrorMessage(metadata.DisplayName), ValidationType = "equal" }; rule.ValidationParameters.Add("valuetocompare", this._valueToCompare); yield return rule; } #endregion } } |
Теперь подробно рассмотрим реализацию метода GetClientValidationRules().
Первый параметр данный метод содержит метаданные свойства, для которого назначен атрибут. В частности, из него можно получить отображаемое имя свойства, которое будет использовано для создания текста сообщения об ошибке. Вторым параметром является контекст Контроллера, включающий его данные и значения из исходного запроса.
Поскольку в данном случае только одно правило, то создается перечисление из единственного экземпляра ModelClientValidationRule. В нем сохраняются:
-
ErrorMessage – сообщение об ошибке. -
ValidationType – уникальное имя данного правила (запомним его, т.к. оно не раз будет использовано в клиентском коде). -
ValidationParameters – коллекция пар "ключ-��начение", в которой сохраняются необходимые для передачи в JavaScript параметры (имена ключей также потребуются в коде на JavaScript).
Таким образом, в результате вызова данной реализации GetClientValidationRules() будет создано правило "equal", содержащее значение для сравнения "valuetocompare" и строку с текстом сообщения об ошибке.
Каркас ASP.NET MVC 3 сохранит эти значения в HTML теге соответствующего поля в следующем виде:
?
1 2 3 4 5 6 7 | id="AgreementAccepted" type="checkbox" data-val="true" data-val-required="The I have read the EULA and I agree with it field is required." data-val-equal-valuetocompare="True" data-val-equal="You must agree with the EULA." value="true"/> |
Обратите внимание, имя правила используется для создания названий атрибутов HTML тегов. Сообщение об ошибке при этом располагается в "data-val-[имя-правила]", а значения параметров в "data-val-[имя-правила]-[ключ]". Кроме того, в именах правил и названиях ключей можно использовать только строчные буквы без пробелов и других символов.
Создаем JavaScript с алгоритмом проверки
Все готово для того, чтобы программа на JavaScript смогла получить данные и передать их в функцию проверки. Но перед тем как продолжить, давайте выберем место хранения для файлов кодом проверок на JavaScript. Для этого в папке Scripts создадим папку Validation. Кроме того, называть все создаваемые файлы будем по аналогии с файлами, содержащими исходный код атрибутов.
Чтобы в очередной раз не изобретать колесо, ядро ASP.NET MVC 3 использует библиотеку jQuery для клиентской части веб-приложения. С её помощью реализован функционал проверки в браузере свойств, отмеченных стандартными атрибутами. Не будем углубляться в тонкости её работы и рассмотрим только необходимые для решаемой задачи детали.
Проверка данных на стороне клиента выполняется дополнением jQuery Validation plugin. Его работа сводится к следующему: при изменении поля необходимо вызвать функцию проверки значения и, в случае ошибки, вывести текст полученного сообщение на соответствующе место страницы. Данный механизм доступен через объект jQuery.validator. Используя его функцию addMethod() необходимо добавить новое правило проверки в их список.
В результате, в папке Scripts\Validation создадим файл EqualAttribute.js, содержащий следующий код:
?
1 2 3 4 5 6 7 8 9 10 11 1 | /// /// /// jQuery.validator.addMethod("equal", function (value, element, param) { if ($(element).attr("type") == "checkbox") { value = String($(element).attr("checked")); param = param.toLowerCase(); } return (value == param); }); jQuery.validator.unobtrusive.adapters.addSingleVal("equal", "valuetocompare"); |
Первые три строчки с комментариями необходимы только поддержки IntelliSense и указывают на используемые файлы с описаниями функций.
Затем, с помощью вызова addMethod(), в список проверок добавляется новое правило. Обратите внимание, что указывается тоже самое имя, которое было задано в атрибуте. Это обязательно, за исключением случаев, когда правило содержит не более одного параметра. Причина этого заключена в адаптерах и будет рассмотрена в следующей части.
Последним параметром addMethod() является функция, ответственная за проверку значения. При вызове она получает три параметра:
-
value – текущее значение поля ввода; -
element – элемент страницы; -
param – список параметров, переданный атрибутом проверки данных.
Код созданной функции проверки сравнивает введенное значение с заданным в param. Данная реализация учитывает особенность объектов представляющих checkbox, которые содержат значение не в HTML атрибуте value, а в checked. Метод при успешной проверке возвращает true, в противном случае – false.
jQuery Validation обработает значение, полученное от функции проверки. Если оно будет равно false, то на месте блока , созданного методом ValidationMessageFor() и отмеченного при этом специальным HTML атрибутом, будет выведен текст сообщения об ошибке. Оно будет убрано в дальнейшем, после успешного прохождения проверки.
Остается разобрать еще одну, последнюю, строчку из созданного JavaScript кода.
Адаптер для jQuery Validate
Рассматривая код функции проверки может возникнуть вопрос: а откуда возьмётся значение для сравнения в переменой param? Логично предположить, что оно будет передано из jQuery Validation. Но откуда тогда сама библиотека возьмет это значение и текст сообщения об ошибке?
Для этой цели существуют адаптеры, которые считывают значения из атрибутов HTML тегов и передают их в jQuery.validator. Они располагаются в объекте jQuery.validator.unobtrusive.adapters и являются дополнением для jQuery Validation, созданным разработчиками ASP.NET MVC 3.
Посмотрим еще раз на последнюю строку созданного JavaScript:
?
1 | jQuery.validator.unobtrusive.adapters.addSingleVal("equal", "valuetocompare"); |
Метод addSingleVal() используется для адаптации правил с одним значением. Имя адаптера указано в качестве первого и совпадает с именем правила. Затем следует название параметра (ключ из заданной в C# коде пары), значение которого будет передано как переменная param в созданную выше функцию.
Разумеется, не все правила используют только одно значение. Существуют другие вариант добавления адаптеров, которые будет рассмотрены в следующей части.
Подключение JavaScript в Представление
Остался один небольшой шаг: необходимо подключить созданный JavaScript на страницу создания профиля. Это можно сделать вручную добавив соответствующую строку в Представление UserProfiles\Create. Или же перетащить в него файл EqualAttribute.js из окна Solution Navigator (Solution Explorer). Для указания пути воспользуемся вызовом метода Url.Content(). Результат будет следующим:
Метод addSingleVal() используется для адаптации правил с одним значением. Имя адаптера указано в качестве первого и совпадает с именем правила. Затем следует название параметра (ключ из заданной в C# коде пары), значение которого будет передано как переменная param в созданную выше функцию.
Разумеется, не все правила используют только одно значение. Существуют другие вариант добавления адаптеров, которые будет рассмотрены в следующей части.
Подключение JavaScript в Представление
Остался один небольшой шаг: необходимо подключить созданный JavaScript на страницу создания профиля. Это можно сделать вручную добавив соответствующую строку в Представление UserProfiles\Create. Или же перетащить в него файл EqualAttribute.js из окна Solution Navigator (Solution Explorer). Для указания пути воспользуемся вызовом метода Url.Content(). Результат будет следующим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @model MVCDemo.Models.NewUserProfileModel @using MVCDemo.Resources.Views.UserProfiles; @{ ViewBag.Title = CreateRes.PageTitle; } @ViewBag.Title@using (Html.BeginForm()) { ......... |
Теперь можно запустить веб-приложение посмотреть на новую функциональность в работе. Приступим к разработке аналогичной поддержки проверки на стороне клиента и для оставшегося атрибута.
Проверка на стороне клиента для атрибута [StringLengthRange]
Реализация атрибута пойдет по знакомому уже плану, но в этот раз без создания адаптера.
Добавим классу StringLengthRangeAttribute поддержку интерфейса IClientValidatable. Здесь необходимо отметить, что jQuery Validation уже содержит набор часто используемых правил. Для их использования в ASP.NET MVC 3 существуют специальные версии классы, наследники ModelClientValidationRule().
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 | namespace MVCDemo.Attributes.Validation { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class StringLengthRangeAttribute : ValidationAttribute, IClientValidatable { private readonly int _minLength; private readonly int _maxLength; ......... #region IClientValidatable Members public IEnumerable ModelMetadata metadata, ControllerContext context) { yield return new ModelClientValidationStringLengthRule( this.FormatErrorMessage(metadata.DisplayName), this._minLength, this._maxLength); } #endregion } } |