ASP.NET MVC Framework | страница 9
Рассмотрим подробнее внутреннее устройство таблицы маршрутизации, контроллеров и представлений, для того чтобы продемонстрировать механизм работы MVC-приложения. Подробная информация по каждому из компонентов будет предоставлена в соответствующих главах, посвященных каждому из компонентов, сейчас же нам необходимо посмотреть на состав этих компонентов на очень высоком уровне, чтобы понимать принципы работы MVC-приложений.
Таблица маршрутизации
Таблица маршрутизации определяет набор правил, на основании которых происходит анализ URL-запроса и вычленения из URL информации, определяющей имя контроллера и действия контроллера, а также сопоставление параметров запроса. В проекте-заготовке правила добавляются в методе >RegisterRoutes
, описанном в файле Global.asax (листинг 1.1).
Листинг 1.1. Метод RegisterRoutes
>public static void RegisterRoutes(RouteCollection routes)
>{
> routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
> routes.MapRoute( "Default", // Название маршрута
> "{controller}/{action}/{id}", // URL с параметрами
> new
> { controller = "Home", action = "Index", id = "" }
> // Значения по умолчанию
> );
>}
Таблица маршрутизации заполняется двумя типами маршрутов — теми, которые должны быть обработаны MVC Framework (метода >MapRoute
коллекции >RouteCollection
), и теми, обработка которых должна быть передана дальше инфраструктуре ASP.NET в обход механизмов MVC Framework (метод >IgnoreRoute
коллекции >RouteCollection
).
В случае с игнорируемыми маршрутами задается определенный адрес либо маска. Так, приведенный в листинге 1.1 маршрут исключает запросы к файлам с расширением axd (используются инфраструктурой ASP.NET для встроенных ресурсов).
Маршруты, обрабатываемые MVC Framework, задаются набором параметров: названием маршрута для идентификации в коллекции, описанием шаблона URL и набором значений по умолчанию. Среди всех параметров обязательными являются >controller
— указывающий имя контроллера, обрабатывающего запросы, удовлетворяющие маске, и >action
— указывающий действие контроллера, обрабатывающего запрос. Все остальные параметры задаются произвольно, и их имена используются для передачи значений при вызове методов контроллера.
Контроллер
Рассмотрим код контроллера HomeController, приведенный в листинге 1.2.
Листинг 1.2. Код контроллера HomeController ИЗ приложения-заготовки
>[HandleError]
>public class HomeController : Controller {
> public ActionResult Index()