2012-01-24 3 views
1

У меня есть приложение MVC3 с двумя областями и корневой зоной. Общая структура выглядит RootMVC3 Маршрутизация с областями

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

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

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

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

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

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

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

, который дает URL, из "локальный * */участник/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

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

Нечто похожее на это:

MVC 2 AreaRegistration Routes Order

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

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

+0

Благодарим за отзыв. Я знаю, что он должен работать, но я еще не успел. Если вы не возражаете поделиться своим кодом, возможно, это поможет. Если вы можете закрепить его и отправить его .. или просто поместить соответствующие отпечатки в электронное письмо, это будет круто. (aespaldi в gmail). – Anne

Смежные вопросы