Предварительная настройка
- домашняя страница, отображающая информацию о вечеринке;
- форма, которая может использоваться для ответа на приглашение (repondezs'ilvousplait - RSVP);
- проверка достоверности для формы RSVP, которая будет отображать страницу с выражением благодарности за внимание;
- средство отправки форм RSVP по электронной почте организатору вечеринки.
В последующих разделах мы достроим проект MVC, который был создан в предыдущей статье, и добавим в него перечисленные выше средства. Первый пункт можно убрать из списка, применив то, что было показано ранее - в существующее представление можно добавить HTML-разметку с подробной информацией о вечеринке. В примере ниже приведено содержимое файла Views/Home/Index.cshtml с внесенными дополнениями.
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="/>
<title>Index</title>
</head>
<body>
<div>
@ViewBag.Greeting (из представления)
<p>Мы собираемся на захватывающую вечеринку.</p>
</div>
</body>
</html>
Мы двигаемся в верном направлении. Если запустить приложение, отобразятся подробности о вечеринке - точнее, заполнитель для подробностей, но идея должна быть понятна.
Проектирование модели данных
В аббревиатуре MVC буква "M" обозначает model (модель), и она является наиболее важной частью приложения. Модель - это представление реальных объектов, процессов и правил, которые определяют сферу приложения, известную как предметная область.
Модель, которую часто называют моделью предметной области, содержит объекты C# (или объекты предметной области), которые образуют "вселенную" приложения, и методы, позволяющие манипулировать ими. Представления и контроллеры открывают предметную область клиентам в согласованной манере, и любое корректно разработанное приложение MVC начинается с хорошо спроектированной модели, которая затем служит центральным узлом при добавлении контроллеров и представлений.
Для приложения PartyInvites сложная модель не требуется, поскольку оно совсем простое, и нужно создать только один класс предметной области, который будет назван GuestResponse. Этот объект будет отвечать за хранение, проверку достоверности и подтверждение ответа на приглашение (RSVP).
Добавление класса модели
По соглашению MVC классы, которые образуют модель, помещаются в папку Models, которую VisualStudio создает во время начальной настройки проекта. Щелкните правой кнопкой мыши на папке Models в окне SolutionExplorer и выберите в контекстном меню пункт Add, а затем пункт Class (Класс). В качестве имени файла укажите GuestResponse.cs и щелкните на кнопке Add, чтобы создать класс.
Отсутствие пункта Class в контекстном меню может означать, что вы оставили отладчик VisualStudio в выполняющемся состоянии. Среда VisualStudio ограничивает виды изменений, которые можно вносить в проект при функционирующем приложении.
Отредактируйте код класса, чтобы он соответствовал примеру ниже:
namespacePartyInvites.Models
{
public class GuestResponse
{
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public bool? WillAttend{ get; set; }
}
}
Вы могли заметить, что свойство WillAttend имеет тип bool, допускающий null, т.е. оно может принимать значение true, false или null. Объяснение этого будет приведено в разделе "Добавление проверки достоверности" далее.
Связывание с методами действий
Одна из целей разрабатываемого приложения состоит в подключении формы RSVP, поэтому необходимо добавить ссылку на нее из представления Index.cshtml, как показано в примере ниже:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="/>
<title>Index</title>
</head>
<body>
<div>
@ViewBag.Greeting (из представления)
<p>Мы собираемся на захватывающую вечеринку.</p>
@Html.ActionLink("Форма RSVP", "RsvpForm")
</div>
</body>
</html>
Html.ActionLink() - это вспомогательный метод HTML. В MVC Framework доступен набор встроенных вспомогательных методов, которые удобны при визуализации ссылок, полей ввода текста, флажков, списков выбора и другого вида HTML-содержимого. Метод ActionLink принимает два параметра: первым является текст (анкор ссылки), который должен отображаться в ссылке, а вторым - действие, которое должно выполняться, когда пользователь щелкает на ссылке.
Просмотреть то, что создал вспомогательный метод, можно, запустив проект:
Если навести курсор мыши поверх ссылки в браузере, станет видно, что ссылка указывает на http://ваш-сервер/Home/RsvpForm. Метод Html.ActionLink() исследовал конфигурацию маршрутизации URL приложения и определил, что /Home/RsvpForm представляет собой URL действия по имени RsvpForm в контроллере HomeController.
Обратите внимание, что в отличие от традиционных приложений ASP.NET, URL-адреса MVC не соответствуют физическим файлам. У каждого метода действия имеется собственный URL, а инфраструктура MVC использует систему маршрутизации ASP.NET для трансляции этих URL в действия.
Создание метода действия
Щелчок на ссылке приводит к выдаче ошибки 404 NotFound (не найдено). Она объясняется тем, что пока еще не создан метод действия, соответствующий URL вида /Home/RsvpForm. Это делается добавлением метода RsvpForm в класс HomeController, как показано в примере ниже:
using System;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc; namespacePartyInvites.Controllers{publicclassHomeController: Controller {publicViewResultIndex(){int hour = DateTime.Now.Hour;ViewBag.Greeting = hour<12?"Доброе утро":"Доброго дня";return View(); } publicViewResultRsvpForm(){returnView(); } }}