Предыдущий ролик Следующий ролик  

Видео урок: Challenge: Implementing transfers

Основы ASP.NET MVC 5

Итак, пришло время дать вам еще одно небольшое задание, которое, по сути, доводит до ума оставшиеся функции нашего приложения. Однако в файлах упражнений, расположенных в папке Chapter 9 -> Start, я уже сделал за вас часть самой простой работы, к рассмотрению которой мы перейдем через минуту. Этот код даст вам несколько подсказок относительно того, как выполнить остальную часть задания. Давайте представим себе, что после недавних развертываний наше руководство и партнеры раскритиковали нас за то, что мы развернули систему банкоматов, которые пока не поддерживают функцию снятия наличных со счета.

И теперь нам придется как можно быстрее решить эту проблему, а также реализовать остальные недостающие функции. На главной странице приложения есть три опции, которые мы еще не реализовали. Это "Снятие средств со счета", "Получить 100 долларов" и "Денежные переводы". На данном этапе функции снятия средств и получения наличных довольно незначительны, поэтому я реализовал их за вас. На досуге вы можете ознакомиться с этим кодом, а я перейду к другому важному моменту, перед тем как вы начнете самостоятельно работать над заданием. Это проверка на достаточность средств на счете и при необходимости добавление соответствующей области к модели вручную.

Итак, давайте повторим ваше задание, а потом я дам вам несколько подсказок. Ваша задача - реализовать функцию денежных переводов. Форма, с помощью которой пользователь будет совершать денежные переводы, довольно проста. Все, что вам нужно, - поле Amount (Сумма) и поле "To account #" (На счет), которое предназначено для задания счета, на который будут переводиться средства. И даже если можно явно записать этот номер в базу данных как перевод, мы просто добавим операцию с отрицательной суммой для пользователя, выполняющего перевод, и еще одну операцию с противоположной положительной суммой - для пользователя, получающего перевод.

Также для отправки формы и обработки ответа вы должны использовать Ajax. Можете воспользоваться библиотекой Microsoft Ajax, которую мы уже рассматривали, или PEAR, или jQuery Ajax, или любую другую известную вам библиотеку. Мы много говорили о валидации на стороне клиента и на стороне сервера, но мало внимания уделили другим видам направлений, которые нам, возможно, придется обрабатывать. В рамках этого задания вы должны рассмотреть два таких направления. Первое - это обработка сценария, при котором пользователь пытается перевести сумму, превышающую имеющуюся у него на счете. Вам нужно проверить доступный баланс и в таком случае вернуть ошибку.

Другое направление - неправильно заданный номер счета получателя перевода. Пользователь будет вводить этот номер счета, поэтому вам нужно проверить, существует ли счет с таким номером. Если вы собираетесь использовать jQuery Ajax, а вы должны ее использовать, если хорошо с ней знакомы, только не передавайте в ответе строку или статус-код, указывающие на успешное или неудачное завершение. Ваш ответ должен быть в виде частичного представления, чтобы встроенный обработчик ошибок мог сделать из него конфетку при необходимости повторного отображения формы. И потом вам не придется перестраивать HTML с помощью JavaScript.

Итак, перед тем как вы приступите к выполнению задания, позвольте показать вам простой метод добавления ошибок в модель вручную во время проверки баланса и номера счета для перевода. В TransactionController я добавил действие, которое будет обрабатывать отправку формы снятия средств. В рамках вот этого метода я проверяю баланс счета, чтобы понять, достаточно ли на нем средств. Если средств недостаточно, все, что мне нужно сделать, - вызвать ModelState.AddModelError. Вот здесь я связываю сообщение об ошибке со свойством Amount.

В случае добавления такой ошибки ModelState.IsValid станет равным "false" и действие вернет представление, поэтому мы сможем отобразить ошибку на экране. Вам не придется связывать ошибку с конкретным свойством. При желании я мог бы заменить ее на пустую строку, и в результате эта ошибка отображалась бы не ниже поля Amount или в том месте, куда я поместил код Razor, порождающий сообщение валидации, а в отчете о валидации в верхней части формы. Итак, предполагается, что на выполнение этого задания вы потратите около 20 минут. После выполнения задания или по истечении 20 минут, особенно если вы почувствуете себя проигравшим даже не забираясь особо далеко, перейдите к просмотру следующего видео, в котором я демонстрирую свое решение.