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()