Маршрутизация MVC3 работает только 1 направление

Я работаю над сайтом ASP.NET mvc 3, который содержит несколько сущностей проекта, а затем у каждого проекта есть несколько связанных подстраниц, каждая из которых работает с компонентом проекта.

Например, у меня может быть проект с несколькими фотографиями, вехами, информацией о пользователе и т. Д. У меня есть представление "Индекс проекта", а также "Домашняя страница проекта", которая ссылается на несколько страниц компонентов. Большинство компонентов имеют два представления: индекс и редактирование / просмотр.

Поэтому я настроил маршрут для правок и просмотров. Обратите внимание, что мой маршрут находится в области под названием ProjectManagement

   context.MapRoute(
            "ProjectManagement_ProjectPageSingle",
            "ProjectManagement/{controller}/{action}/{projectNumber}/{projectChildId}",
            new { controller = "Project", action = "Home" }
   );

и все действия моего контроллера выглядят примерно так:

 public ActionResult Edit(string projectNumber, string projectChildId)

Это хорошо работает, когда я набираю URL прямо в браузере. Например:

~/ProjectManagement/Milestone/Edit/39999P110175/1   

однако, когда я генерирую ссылку действия, используя:

 <a href="@Url.Action("Edit", new { projectNumber = Model.Project.ProjectNumber, projectChildId = entry.Id})">

URL действия выглядит примерно так:

~/ProjectManagement/Milestone/Edit/39999P110175?projectChildId=1

Итак, маршрут работает... но генератор ссылок действий не работает? Не уверен, куда идти отсюда. Любые советы будут высоко ценится.

Обратите внимание, что то же самое происходит при использовании @Html.ActionLink вместо @Url.Action.

Спасибо!

2 ответа

Спасибо Майклу за ответ. Вот ответ для других.

Я имел:

 context.MapRoute(
            "ProjectManagement_ProjectPage",
            "ProjectManagement/{controller}/{action}/{projectNumber}",
            new { controller = "Project", action = "Home"}
 );

 ///more routes

  context.MapRoute(
             "ProjectManagement_ProjectPageSingle",
             "ProjectManagement/{controller}/{action}/{projectNumber}/{projectChildId}",
             new { controller = "Project", action = "Home" }
  );

URL также соответствовал маршруту ProjectPage, поэтому сначала он был выбран. Пришлось перевернуть заказ, поэтому более конкретный маршрут пришел первым.

Благодарю.

Вы не указали название области:

@Url.Action(
    "Edit", 
    new { 
        projectNumber = Model.Project.ProjectNumber, 
        projectChildId = entry.Id,
        area = "ProjectManagement" 
    }
)

Также убедитесь, что нет никаких других маршрутов, которые могут конфликтовать с этим при регистрации вашего региона, который должен выглядеть следующим образом:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "ProjectManagement_default",
        "ProjectManagement/{controller}/{action}/{projectNumber}/{projectChildId}",
        new { controller = "Project", action = "Home" }
    );
}
Другие вопросы по тегам