Спонсор: Microsoft
Опубликован: 30.01.2013 | Доступ: свободный | Студентов: 1191 / 138 | Длительность: 17:23:00
Теги: .net, ajax, asp, www, интранет
Лекция 6:

Построение приложений на основе шаблона "Model-View-Controller" с применением ASP.NET MVC Framework

Контроллеры

Контроллеры в рамках платформы ASP.NET MVC Framework являются одним из важнейших программных компонентов. После сопоставления маршрута адреса HTTP-запроса управление передается контроллеру. В контроллере производятся все дальнейшие действия для правильной обработки запроса. Так в контроллере может происходить взаимодействие с моделью (бизнес-логикой). Результатом работы контроллера является перенаправление обработки элементу, генерирующему пользовательский интерфейс (как правило – код HTML).

Контроллеры размещаются в папке Controllers. Каждый контроллер – отдельный класс. При этом существует соглашение об именовании таких классов: имя класса складывается из названия контроллера и суффикса "Controller". Так, например, контроллер с именем "Home" определяется посредством класса "HomeController", а контроллер с именем "Product" - "ProductController".

Каждый контроллер должен является прямым или косвенным наследником абстрактного класса "Controller". В каждом классе контроллера определяется набор необходимых методов. Каждый такой метод – действие контроллера. При определении маршрута в таблице маршрутов указывается имя контроллера, а также имя действия контроллера. Таким образом, после определения маршрута создается новый класс контроллера, и вызывается метод, соответствующий действию контроллера.

Программный код для типичного контроллера приведен ниже.


Как видно, в приведенном примере определяется контроллер с именем "Home", в котором определено два действия – "Index" и "About".

Каждое действие контроллера должно возвращать объект типа ActionResult. Класс ActionResult определяет представление, которое будет использовано для генерации результата. По сути, ActionResult – абстрактный класс, наследники которого реализуют логику генерации представления. Базовый класс Controller содержит ряд основных методов для генерации представлений (наследников класса ActionResult). В приведенном выше примере используется метод View базового класса. Этот метод возвращает объект типа ViewResult, который используется для генерации представления на основе шаблонов страниц ASPX.

Основные методы, которые доступны в базовом классе для генерации объектов представления:

View используется для генерации представления на основе шаблонов ASPX;
Content позволяет отправить клиенту обычную текстовую строку в качестве текущего представления;
File позволяет отправить клиенту содержимое файла на сервере в качестве текущего представления;
Json позволяет отправить клиенту JSON-представление объекта, которое, как правило, используется в рамках сценариев JavaScript;
Redirect, RedirectToAction, RedirectToRoute позволяют перенаправить клиента на другую страницу.

Как можно догадаться, метод View используется в приложении в большинстве случаев. Он позволяет передать формирование пользовательского интерфейса заранее определенному шаблону ASPX. Все шаблоны для генерации пользовательского представления определены в папке "Views". В этой папке существует ряд подпапок, имена которых соответствуют названию контроллера. При этом имена файлов шаблонов соответствуют имени действия.


В приведенной выше структуре папок контроллеру "HomeController" соответствует папка "Home", а контроллеру "AccountController" - папка "Account". При этом для обработки действия "Index" контроллера "Home" будет использоваться шаблон "Home/Index.aspx", а для обработки действия "About" - шаблон "Home/About.aspx".

В случае, когда необходимо для некоторых действий контроллера использовать другое представление его имя можно указать в параметре метода View. Например, в следующем контроллере действия "Index" и "About" будут использовать представление с именем "Home/Index.aspx".


Аналогичным образом можно использовать и другие представления.

Каждое действие контроллера может содержать набор параметров. Эти параметры определяются как параметры соответствующих методов. Значение этих параметров будет определяться на основании текущего контекста исполнения. Например, если при определении маршрута определен фрагмент с именем "id", то его значение можно получить через параметр метода, определив последний соответствующим образом.


Аналогичным образом можно определить несколько параметров для действия контроллера.


При определении значений вызываемого действия контроллера источниками информации могут служить:

  • значение одноименных фрагментов в адресе HTTP-запроса;
  • значение параметров GET- и POST-запроса;
  • значения, определенные в маршруте по умолчанию;
  • значения, определенные внутри контекста исполнения каким-то иным образом (например, в модулях расширениях).

В приведенных примерах связывание параметров осуществляется с параметрами элементарных типов (число, строка и т.д.). Однако, в качестве параметра можно использовать сложный объект. В этом случае среда исполнения ASP.NET MVC Framework также осуществит связывание.


Таким образом, контроллер является центральной точкой в обработке HTTP-запроса, в котором определяется вся дальнейшая логика обработки HTTP-запроса.

Краткие итоги

Контроллеры в структуре приложения на базе ASP.NET MVC Framework играют одну из важнейших ролей. В рамках контроллера осуществляется обращение к модели (бизнес-логике) и генерации объекта представления. Каждый контроллер представляет собой класс, который является наследником базового класса Controller. Базовый класс содержит набор методов для генерации типичных типов представления. Каждое действие контроллера является методов класса этого контроллера. При этом каждый метод может содержать произвольное количество параметров, каждый из которых автоматически связывается с параметрами контекста исполнения ASP.NET MVC Framework.

Марина Воробьева
Марина Воробьева
Виктория Ткаченко
Виктория Ткаченко

Проигрыватель не работает. После нажатия кнопки Play ничего не происходит.

Антон Некрасов
Антон Некрасов
Россия, Тольятти, Поволжский Государственный Университет Сервиса, 2013