UR.ANUS
Asp.net mvc framework
вернуться

Магдануров Гайдар Ильдарович

Шрифт:

В предыдущей части этой главы мы уже рассмотрели простой пример создания маршрута и класс Route, который используется для этих целей. При создании маршрута с помощью класса Route важную роль играют параметры имени маршрута, Url и три словаря параметров, определенные свойствами Defaults, Constraints и DataTokens. Рассмотрим их назначение и применение более подробно.

Наименование маршрута

В MVC Framework добавление маршрута реализуется путем вызова одного из вариантов MapRoute, методов расширения RouteCollection. Одним из отличиев MapRoute является требование к обязательному указанию имени маршрута, тогда как стандартные средства RouteCollection позволяют добавить маршрут без указания имени.

Примечание

Следует учесть, что имена для маршрутов должны быть уникальными. При попытке добавить в таблицу маршрутизации маршрут с именем, которое уже существует в таблице, будет вызвано исключение.

********************************

Имя маршрута — это достаточно важная часть маршрутизации в MVC Framework. Есть несколько полезных вариантов использования имени маршрута, рассмотрим их по порядку.

RedirectToRoute

Имя маршрута используется для возврата результата действия в виде RedirectToRouteResult с помощью стандартного метода контроллера RedirectToRoute. Назначение RedirectToRoute — это перенаправление выполнения запроса с одного маршрута на другой. На самом деле, для переадресации на другой маршрут MVC Framework на основании переданного имени маршрута генерирует строку URL, которая соответствует новому маршруту и производит возврат клиенту ответа в виде требования на переадресацию на новый URL (redirect).

К примеру, допустим определен маршрут с именем AccountLogOn так, как показано далее:

routes.MapRoute(

"AccountLogOn",

"Account/LogOn",

new { controller = "Account", action = "LogOn" }

);

В этом случае вызов RedirectToRoute, который переадресует пользователя на новый маршрут, будет выглядeть так:

public ActionResult SomeAction

{

return RedirectToRoute("AccountLogOn");

}

После выполнения действия SomeAction пользователь будет перенаправлен на URL Account/LogOn, согласно определению маршрута AccountLogOn.

AjaxHelper

В методах расширения класса AjaxHelper, таких как BeginRouteForm и RouteLink, имя маршрута используется для генерации строки запроса.

BeginRouteForm — это метод расширения, который позволяет упростить создание формы для отправки результатов через Ajax.BeginRouteForm в данном смысле является аналогом BeginForm другого метода расширения класса AjaxHelper, который строит форму на основании определенных значений контроллера и действия. В случае, когда вызывается BeginRouteForm, механизм класса AjaxHelper формирует на базе имени маршрута строку URL и подставляет ее атрибуту action при рендеринге формы в представлении.

RouteLink — это метод расширения, позволяющий упростить создание ссылки в представлении, которая осуществляла бы Ajax-запросы. Роль имени маршрута при работе RouteLink точно такая же, как и в BeginRouteForm — по имени маршрута строится URL-строка, которая рендерится в представлении в виде атрибута href.

UrlHelper

В методе расширения RouteUrl класса UrlHelper имя маршрута используется для создания строки URL, соответствующей маршруту.

Шаблон маршрута и свойство Url

При создании маршрута строковый параметр Url определяет шаблон маршрута, который, как правило, задает некоторую группу возможных клиентских запросов. Следует учитывать, что при наличии нескольких маршрутов механизм маршрутизации ASP.NET всегда выбирает самый первый из них — тот, что был добавлен в таблицу маршрутизации первым.

Как мы уже говорили, по умолчанию MVC Framework создает один-единственный маршрут с именем Default и шаблоном {controller}/{action}/{id}. Этот маршрут хорош тем, что он один позволяет обрабатывать большую часть возможных пользовательских запросов. По сути такой шаблон говорит о том, что данный маршрут определяет все запросы с вложениями до третьего уровня, т. е. этот маршрут обработает и http://sample.domain/level1/ и http://sample.domain/level1/level2/, и http://sample.domain/level1/level2/level3/, где level1, level2 и level3 могут принимать любые значения. На самом деле это очень большое количество возможных запросов и на практике один маршрут Default покрывает все требования разработчиков к маршрутизации.

Однако разработчик может добавить гибкости своему проекту и улучшить представления строк URL, если определит свои маршруты. Далее представлено два подобных маршрута:

routes.MapRoute(

"AccountLogOn",

"LogOn",

new { controller = "Account", action = "LogOn" }

);

routes.MapRoute(

"Home",

"{action}",

new { controller = "Home", action = "Index" }

);

Первый вызов MapRoute создает маршрут под наименованием AccountLogOn, шаблон которого четко соответствует только одному возможному клиентскому запросу http://sample.domain/Logon. Второй вызов создает маршрут Home более широкого определения. Под этот маршрут попадают все клиентские запросы вида http://sample.domain/Home/{action}.

  • Читать дальше
  • 1
  • ...
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • ...

UR.ANUS - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • support@anus.bid