/ / MVC3 Routing z obszarami - asp.net-mvc-3, routing URL, obszary asp.net-mvc-3

MVC3 Routing z obszarami - asp.net-mvc-3, routing URL, obszary asp.net-mvc-3

Mam aplikację MVC3 z dwoma obszarami i obszarem głównym. Wygląda ogólna struktura Korzeń

- 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

Mam dwa problemy z routingiem. Pierwszym z nich jest to, że nie mogę przejść do żadnych stron w folderach głównego katalogu / widoków, z wyjątkiem tych, które są domyślnie ustawione w pliku Global.asax.cs. Plik Global.asax.cs wygląda następująco:

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

Kod w katalogu głównym / widoki / strona główna / index.cshtml, który jest stroną startową, wygląda następująco:

@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" })

Dwa łącza obszarowe działają dobrze, jak dodałemtrasy do plików rejestracyjnych w każdym obszarze, ale link do konta / rejestru, który jest inną stroną w katalogu głównym, powoduje "błąd braku zasobów". Jednak jeśli zmienię trasę Global.asax.cs na

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

na domyślnej trasie, mogę rozpocząć na stronie rejestru.

Moje pierwsze pytanie brzmi: Jak korzystać z tras, aby uzyskać dostęp do obu stron w obszarach i w katalogu głównym (np. Strona Konta / Rejestracja)?

Moje drugie pytanie dotyczy obszarówsami. Ponieważ oba mają kontroler "domowy", nazwa obszaru została umieszczona przed nim, aby je odróżnić, ale nie chciałbym tego robić. Obecnie plik "ParticipantAreaRegistration.cs ma kod:

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

co daje URL "s" localhost **/ Uczestnik / Strona główna "

podczas gdy ManagerAreaRegistraion.cs ma kod

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

);

co daje adresy URL "localhost *** / Home /"

Moje drugie pytanie brzmi: Jak mogę uzyskać adres URL "localhost ** / Home dla menedżera i uczestnika (lub dla dowolnej liczby obszarów) bez konieczności wyświetlania nazwy obszaru w adresie URL?

Wiem, że to pytanie jest podobne do innych już zapisanych w aktach, ale przetrząsnąłem je bezskutecznie i obecnie tonę w nieefektywności, więc pomyślałem, że spróbuję zapytać ze specyfiką. Dzięki.

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz użyć niestandardowego routingu.

Coś podobnego do tego:

MVC 2 RejonRejestracja Trasowanie trasy

Korzystając z rozwiązania opisanego powyżej, możesz wpisać niestandardową kolejność routingu.

W jednej z moich aplikacji mam obszary o nazwie Administrator, Blog, Członkowie i Publiczny. Przekierowałem obszar publiczny jako adres URL: http://localhost:4000/, Admin jako: http://localhost:4000/admin, blog tak jak: http://localhost:4000/blog, itp. Jeśli chcesz mój kod, mogę dać ty.