Маршрутизация MVC3 работает только 1 направление - PullRequest
1 голос
/ 12 марта 2012

Я работаю над сайтом 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 ]

0 голосов
/ 12 марта 2012

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

У меня было:

 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, поэтому сначала его выбрали. Пришлось перевернуть заказ, поэтому сначала пришел более конкретный маршрут.

Спасибо.

0 голосов
/ 12 марта 2012

Похоже, вы не указали название области:

@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" }
    );
}
...