Литмир - Электронная Библиотека

Применяется следующее именование классов контроллеров, которое в свою очередь используется для именования файлов: имяКонтроллераСоntroller.

В проекте-заготовке созданы два файла контроллера: HomeController, отвечающий за логику страничек сайта, и Accountcontroller, отвечающий за логику регистрации и авторизации пользователей.

Чуть далее в этой главе описана внутренняя структура классов контроллеров.

Папка Models

В папке Models предлагается размещать файлы с логикой взаимодействия с базой данных (модель в паттерне MVC). В приложении-заготовке не генерируется код для работы с данными, поскольку это приложение очень простое и лишь предоставляет базовую структуру. В связи с этим созданная Visual Studio папка Models пуста.

Папка Scripts

В папке Scripts предлагается размещать файлы с кодом клиентских скриптов, используемых на клиенте. В проекте-заготовке уже включены библиотеки JavaScript-кода: MicrosoftAjax — содержащая код для создания клиентской инфраструктуры Microsoft Ajax, MicrosoftAjaxMvc — содержащая код, работающий поверх инфраструктуры Microsoft Ajax и используемый MVC Framework для реализации поддержки асинхронного обновления форм, а также jQuery — популярная библиотека, предоставляющая методы для манипуляции с объектами HTML-документов.

Подробнее об использовании возможностей клиентских библиотек можно узнать в главе, посвященной клиентскому программированию с использованием MVC Framework.

Папка Views

В папке Views размещаются файлы представления. В качестве стандартного механизма представлений в MVC Framework используются ASPX-файлы для создания представлений, MASTER-файлы для создания шаблонов общей разметки части представлений, а также ASCX-файлы для создания частичных представлений для многократного использования в составе других представлений.

Если вы знакомы с WebForms в ASP.NET, то представления по сути являются страницами ASP.NET без использования серверных элементов управления и серверных форм.

В папке Views файлы представлений размещаются следующим образом: для каждого контроллера в папке Views создается вложенная папка по имени этого контроллера (для HomeController папка Home, для AccountController папка Account). Помимо этого используется вложенная папка Shared для представлений, шаблонов и частичных представлений, используемых несколькими представлениями (структура для приложения-заготовки показана на рис. 1.5).

Asp.net mvc framework - img_6

Рис. 1.5. Структура папок представлений для приложения-заготовки

При создании проекта-заготовки в папку Views помещается файл Web.config, описывающий конфигурацию этой папки. В этом файле для папки назначен специальный обработчик, запрещающий доступ к файлам в этой папке пользователям на уровне веб-сервера.

<handlers>

<remove name="BlockViewHandler"/>

<add name="BlockViewHandler"

  path="*" verb="*" preCondition="integratedMode"

  type="System.Web.HttpNotFoundHandler"/>

</handlers>

Соотнесение представлений и методов контроллеров описано далее в этой главе.

Файл Default.aspx

Файл Default.aspx создается в качестве заглушки, для того чтобы веб-сервер вызывал инфраструктуру ASP.NET при обращении к сайту без указания пути (например, http://www.remix.ru/). Сама по себе страница Defaut.aspx пуста и содержит в обработчике события загрузки страницы код, который переадресует вызов инфраструктуре ASP.NET.

public void Page_Load(object sender, System.EventArgs e)

{

  string originalPath = Request.Path;

  HttpContext.Current.RewritePath(Request.ApplicationPath, false);

  IHttpHandler httpHandler = new MvcHttpHandler();

  httpHandler.ProcessRequest(HttpContext.Current);

  HttpContext.Current.RewritePath(originalPath, false);

}

Файл Global.asax

Файл Global.asax используется для создания таблицы маршрутизации, используемой для соотнесения запросов к MVC-приложению и конкретных методов контроллеров и параметров вызова этих методов, поскольку файл Global.aspx предоставляет возможность создания обработчиков глобальных событий уровня всего веб-приложения. При запуске приложения задается таблица маршрутизации, а также на этом этапе могут быть выполнены другие операции, о которых можно будет узнать в следующих главах книги.

protected void Application_Start()

{

  RegisterRoutes(RouteTable.Routes);

}

Метод RegisterRoutes описан подробнее далее в этой главе.

Файл Web.config

Файл Web.config описывает конфигурацию приложения, именно в конфигурации описаны модули и обработчики, которые позволяют работать MVC Framework.

Основным модулем является модуль маршрутизации, который вызывается для всех запросов и инициирует работу инфраструктуры MVC Framework.

<add name="UrlRoutingModule"

  type="System.Web.Routing.UrlRoutingModule, System.Web.Routing,

  Version=3.5.0.0,

  Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Рассмотрев физическую структуру файлов MVC-приложения, перейдем к принципам функционирования и внутреннего устройства компонентов MVC-приложения.

Обработка запросов MVC-приложением

Для того чтобы понять принципы работы компонентов MVC-приложения, необходимо четко понимать схему обработки запросов. К счастью, жизненный цикл запроса для MVC-приложения очень прост (рис. 1.6).

Asp.net mvc framework - img_7

Поступающий к веб-серверу HTTP-запрос передается среде выполнения ASP.NET, которая инициализирует инфраструктуру MVC Framewrok и передает запрос для обработки компоненту маршрутизации. На основании таблицы маршрутизации, загружаемой при запуске веб-приложения, модуль маршрутизации определяет имена контроллера и метода контроллера, который должен обработать запрос, а также параметры запроса, которые должны быть переданы контроллеру. После этого генерируется контекст запроса, содержащий параметры запроса и среды выполнения приложения (такие как URL запроса, IP-адрес клиента и сервера и т. п.), создается экземпляр класса контроллера и ему передается управление путем вызова соответствующего метода класса контроллера — действия контроллера в терминах MVC.

Метод контроллера на основании параметров запроса выполняет некоторую логику, выбирает представление, которое должно быть отображено пользователю, и передает управление механизму генерации разметки (движком представления в терминах MVC), который уже отображает представление.

Для обмена данных между представлением и контроллером используется специальная коллекция viewData — являющаяся основным связующим звеном между контроллером и представлением.

После того как разметка была сгенерирована движком представления, веб-сервер возвращает ее в качестве ответа пользователю по протоколу HTTP. На этом жизненный цикл обработки запроса MVC-приложением заканчивается.

Компоненты MVC-приложения

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

4
{"b":"971383","o":1}