MVC3 Маршрутизация с областями - PullRequest
1 голос
/ 24 января 2012

У меня есть приложение MVC3 с двумя областями и корневой областью.Общая структура выглядит как Root

- Root/Areas/Manager
    * Views/Home/Index.cshtml
    * ManagerAreaRegistration.cs
- Root/Areas/Participant
    * Views/Home/Index.cshtml
    * ParticipantAreaRegistraion.cs
- Root
    * Views/Home/Index.cshtml
    * Views/Account/Register.cshtml
    * Global.asax.cs

У меня две проблемы с маршрутизацией.Во-первых, я не могу перейти ни к одной странице в папках Root / Views, кроме той, которая установлена ​​по умолчанию в файле Global.asax.cs.Файл Global.asax.cs выглядит следующим образом:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
   new {controller="Home" , action = "Index", id = UrlParameter.Optional }, 
   new[] { "MVCApplication.Controllers" }    // for areas 
   );
...     
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
...

А код в Root / Views / Home / Index.cshtml, который является стартовой страницей, выглядит следующим образом:

@Html.ActionLink("Accounts","Register", new {area="", controller="Accounts"},null)
@Html.ActionLink("Manager", "Index", new { area = "Manager", controller = "Home" })
@Html.ActionLink("Participant", "Index", new { area = "Participant", controller = "Home" })

две области ссылок работают нормально, так как я добавил маршруты в файлы регистрации в каждой области, но ссылка на учетные записи / реестр, которая является другой страницей в корне, дает сообщение об ошибке «ресурсы не найдены».Однако, если я изменю маршрут Global.asax.cs так, чтобы он был

    new {controller="Accounts" , action = "Register", id = UrlParameter.Optional }, 

в маршруте по умолчанию, я мог бы начать со страницы регистрации.

Итак, мой первый вопрос: Как использовать маршруты, чтобы иметь доступ к обеим страницам в Областях и в Корне (т. Е. Учетные записи / страницы регистрации)?

Мой второй вопрос касается самих областей.Поскольку у них обоих есть контроллер «Дом», я выделил название области перед одним, чтобы отличить его, но я бы не хотел этого делать.В настоящее время файл 'ParticipantAreaRegistration.cs имеет код:

  context.MapRoute(
            "Participant_default",
            "Participant/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
          new[] { "MvcApplication.Areas.Participant.Controllers"  }    // for areas 
            );

, который дает URL-адреса "localhost ** / Participant / Home"

, тогда как ManagerAreaRegistraion.csимеет код

 context.MapRoute(
            "Manager_default",
            "{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
                         new[] { "MvcApplication.Areas.Manager.Controllers" }    // for areas 

        );

, который дает URL-адреса "localhost *** / Home /"

Мой второй вопрос: Как я могу получить URL-адрес "localhost** / Домашняя страница как для менеджера, так и для участника (или для любого количества областей) без необходимости отображать имя области в URL-адресе?

Я знаю, что этот вопрос похож на другие, уже внесенные в файл, но у меня естьобыскивал их безрезультатно и в настоящее время тонет в неэффективности, поэтому я подумал, что попробую спросить с конкретностью. Спасибо.

1 Ответ

0 голосов
/ 24 января 2012

Вы можете использовать пользовательскую маршрутизацию.

Что-то похожее на это:

MVC 2 AreaRegistration Routes Order

Использование решенияВ приведенной выше проблеме вы можете написать собственный порядок маршрутизации.

В одном из моих приложений у меня есть области с именами Admin, Blog, Members и Public.Я перенаправил Публичную область как URL: http://localhost:4000/, Администратор как: http://localhost:4000/admin, Блог как: http://localhost:4000/blog, и т. Д. Если вы хотите мой код, я могу дать вам.

...