Пользовательская маршрутизация в пределах области - PullRequest
3 голосов
/ 27 сентября 2010

У меня есть Зона с именем Members и следующие зарегистрированные маршруты в файле MembersAreaRegistration:

context.MapRoute(
     "Members_Profile",
     "Members/Profile/{id}",
     new { controller = "Profile", action = "Index", id = UrlParameter.Optional },
     new string[] { "MyProject.Web.Mvc.Areas.Members.Controllers" }
     );

context.MapRoute(
     "Members_default",
     "Members/{controller}/{action}/{id}",
     new { controller = "Home", action = "Index", id = UrlParameter.Optional },
     new string[] { "MyProject.Web.Mvc.Areas.Members.Controllers" }
     );

Я хочу иметь возможность сопоставлять следующие URL-адреса:

~/Members (should map ~/Members/Home/Index )
~/Members/Profile/3 (should map ~/Members/Profile/Index/3)

С этимНа маршрутах регистрации все работает отлично.Однако я добавил следующий URL:

~/Members/Profile/Add 

и получил ошибку:

"Словарь параметров содержит пустую запись для параметра 'id' ненулевого типа«System.Int32» для метода «System.Web.Mvc.ActionResult Index (Int32)» в «MyProject.Web.Mvc.Areas.Members.Controllers.ProfileController». Необязательным параметром должен быть ссылочный тип, обнуляемый тип,или быть объявлен необязательным параметром. "

Я также хочу, чтобы URL-адрес

~/Members/Profile/Edit/3

Что я должен изменить, чтобы все эти URL-адреса работали правильно?

1 Ответ

3 голосов
/ 27 сентября 2010

Вам нужно будет добавить пару дополнительных маршрутов, ПЕРЕД маршрутами, которые вы уже определили. Это потому, что это конкретные маршруты, которые вы хотите выбрать перед более общими маршрутами, которые у вас уже есть.

context.MapRoute(
     "Members_Profile",
     "Members/Profile/Add",
     new { controller = "Profile", action = "Add" },
     new string[] { "MyProject.Web.Mvc.Areas.Members.Controllers" }
     );

context.MapRoute(
     "Members_Profile",
     "Members/Profile/Edit/{Id}",
     new { controller = "Profile", action = "Edit", id = UrlParameter.Optional },
     new string[] { "MyProject.Web.Mvc.Areas.Members.Controllers" }
     );
...