2010-09-27 5 views
3

я есть область под названием Пользователей и следующие зарегистрированные маршруты в файле 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" } 
    ); 

Я хочу, чтобы иметь возможность сопоставить следующие адреса:

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

С этот маршрут регистрации все работает нормально. Тем не менее, я добавил следующий URL:

~/Members/Profile/Add 

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

"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Index(Int32)' in 'MyProject.Web.Mvc.Areas.Members.Controllers.ProfileController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."

Я также хочу, чтобы иметь URL

~/Members/Profile/Edit/3 

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

ответ

3

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

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" } 
    ); 
+0

Я последовал за вашим советом с небольшой модификацией. Теперь маршруты, которые я использую, следующие (порядок важен): 1. «Члены/Профиль/Добавить» 2. «Участники/Профиль/{id}» 3. «Участники/{контролер}/{действие }/{id} " Я избавился от маршрута для редактирования, потому что он покрыт последним и самым общим. Спасибо за помощь. – Martin

+0

Рад помочь. Пожалуйста, отметьте вопрос как ответ, чтобы другие могли его найти. – Clicktricity