/ / MVC3 маршрутизиране с области - asp.net-mvc-3, url-маршрутизация, asp.net-mvc-3-зони

MVC3 маршрутизиране с области - asp.net-mvc-3, url-маршрутизация, asp.net-mvc-3-зони

Имам приложение MVC3 с две зони и коренна област. Изглежда общата структура корен

- 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

Имам два проблема с маршрута. Първото е, че не мога да навигирам до страници в папките "Корен / изгледи", с изключение на тези, зададени по подразбиране в файла 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
);

който дава URLs на "localhost **/ Участник / 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 ** / Home за мениджър и участник (или за произволен брой области), без да е необходимо името на областта да се показва в URL адреса?

Знам, че този въпрос е подобен на други, които вече са написани, но аз ги изхвърлих без резултат и понастоящем се удавям в неефективност, така че мислех, че ще се опитам да питам със специфичност. Благодаря.

Отговори:

0 за отговор № 1

Можете да използвате персонализирано маршрутизиране.

Нещо подобно на това:

MVC 2 AreaRegistration Routes Order

Използвайки решението в горния проблем, можете да напишете обичайния ред на маршрута.

В една от моите приложения, имам области, на име Admin, Блог, членове и Публичен. Пренасочих публичния район като URL адрес: http://localhost:4000/, Администратор като: http://localhost:4000/admin, блог като: http://localhost:4000/blog, и т.н. Ако искате моя код, мога да дам ти.