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

На рис. 9.1 вы можете заметить в проектах Store и Forum файл Routes.cs. Этот файл добавлен в проекты для того, чтобы реализовать класс AreaRegistration. Рассмотрим содержимое файла Routes.cs в проекте Store в листинге 9.1.

Листинг 9.1. Содержимое файла Routes.cs проекта Store

namespace Store

{

  using System.Web.Mvc;

  using System.Web.Routing;

  public class Routes : AreaRegistration

  {

    public override void RegisterArea(

               AreaRegistrationContext context)

    {

      context.MapRoute(

            "Store_Default",

            "Store/{controller}/{action}/{id}",

            new {controller = "Products",

            action = "List", id = ""},

            new string[] { "Store.Controllers" }

      );

    }

    public override string AreaName

    {

      get { return "Store"; }

    }

  }

}

Обратите внимание, класс Routes наследуется от AreaRegistration, что позволит подсистеме ASP.NET MVC в дальнейшем проинициализировать с помощью него подсистему областей. В классе Routes содержится два перегруженных члена: метод RegisterArea и свойство AreaName.

В RegisterArea производится регистрация маршрутов в контексте приложения с областями. С помощью context.MapRoute создается маршрут под названием store_Default. Последнее значение параметра new string[] { "Store.Controllers" } определяет пространство имен, в котором находятся контроллеры, сопоставленные данному маршруту.

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

Классы, подобные Routes для проекта Store, необходимо создать для каждого проекта в решении с областями.

Следующим шагом будет добавление в родительском проекте AreasProject в Global.asax следующей строки кода:

protected void Application_Start()

{

  AreaReg±stration.Reg±sterAllAreas();

  RegisterRoutes(RouteTable.Routes);

}

Вызов AreaRegistration.RegisterAllAreas() при запуске приложения позволит ASP.NET MVC инициализировать все имеющиеся области и их маршруты в приложении.

Последним шагом, необходимым для запуска проекта с областями, является модификация файлов проекта *.csproj (или *.vbproj, если ваши проекты написаны на Visual Basic) для каждого из проектов в решении. Для того чтобы получить доступ к этим файлам, последовательно выгрузите проекты из решения с помощью команды UnloadProject. В контекстном меню на выгруженном проекте выберите Edit***.csproj (рис. 9.2), где *** — название проекта.

Asp.net mvc framework - img_73

Рис. 9.2. Контекстное меню, позволяющее редактировать файл проекта

В файлах проектов содержится часть закомментированных определений, которые требуется раскомментировать для использования решения на базе областей. Для проектов-областей это куски кода с комментариями:

<!— To enable MVC area subproject support, uncomment the following two lines: —>

 и

<!-- If this is an area child project, uncomment the following line: -->

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

<!— To enable MVC area subproject support, uncomment the following two lines: -->

и

<!-- If this is an area parent project, uncomment the following lines: -->

Примечание

Возможно, что в следующих релизах ASP.NET MVC 2 действие с редактированием файлов проекта будет излишним. Ожидается, что работа с областями будет поддерживаться на уровне Solution Explorer, что облегчит создание новых областей и проектов на их базе.

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

Теперь, когда проект подготовлен полностью, можно использовать проекты-области в родительском проекте следующим образом. Видоизменим в файл Site.Master в родительском проекте блок кода списка вкладок так, чтобы он выглядел, как во фрагменте:

<ul id="menu">

  <li><%= Html.ActionLink("Home", "Index", "Home",

         new {area = "AreasProject"}, null)%></li>

  <li><%= Html.ActionLink("Forum", "Index", "Forum",

         new { area = "Forum" }, null) %></li>

  <li><%= Html.ActionLink("Store", "List", "Products",

         new { area = "Store" }, null) %></li>

  <li><%= Html.ActionLink("About", "About", "Home",

         new {area = "AreasProject"}, null)%></li>

</ul>

Обратите внимание, что построение ссылок с помощью Html.ActionLink теперь требует указания области, в которой нужно найти контроллер и действие. Если мы запустим проект, то увидим следующее (рис. 9.3).

Новые вкладки Store и Forum будут работать согласно заданным правилам и отображать представления из проектов-областей.

Asp.net mvc framework - img_74

Области в одном проекте

Если в решении предыдущего примера областей для нескольких проектов включить опцию показа скрытых файлов для родительского проекта, то мы увидим следующую картину (рис. 9.4).

В родительском проекте AreasProject в папке Views/Areas создаются скрытые элементы из проектов-областей. Это требуется для того, чтобы родительский проект самостоятельно отображал представления проектов-областей.

Однако эта структура скрытых файлов может быть использована и напрямую. В ASP.NET MVC 2 Preview 2 появилась возможность создания решений с одиночными проектами на базе областей. Такие решения содержат только один проект, в котором реализованы все области. На рис. 9.5 представлена структура одиночного проекта, где реализованы те же самые области, которые были реализованы в предыдущем разделе с помощью нескольких проектов-областей.

Чтобы создать такой проект, по аналогии с предыдущим примером, мы должны создать вместо нескольких проектов иерархию областей в одном проекте. Для этого в корне проекта необходимо создать папку Areas, в которой каждая созданная папка будет являться отдельной областью. На рис. 9.5 такими папками являются Forum и Store. В них следует создать папку Controllers и Views для контроллеров и представлений и реализовать их подобно тому, как мы сделали это в предыдущем разделе. Обратите внимание, что для каждой папки-области также нужно создать файл Routes.cs с реализацией класса AreaRegistration. Необходимо обновить и Global.asax, добавив в него вызов AreaRegistration.RegisterAllAreas ().

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

Asp.net mvc framework - img_75

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