Ошибка маршрута с MVC3 с несколькими именами контроллеров - PullRequest
0 голосов
/ 03 ноября 2011

вот моя навигационная иерархия.

  • Каталог
    -Collection
    - Медиа
    - Атрибуты
    - Пользователь
  • Коллекция
    -Media
    - Продукция
    - Атрибуты

У меня есть контроллер для всех. Вот как должен выглядеть мой URL

http://Localhost/Catalog/Collection/1  // return all collection for catalogeid 1
http://Localhost/Catalog/Media/1  // return all media for catalogeid 1
http://Localhost/Collection/Media/1  // return all media for collectionid 1

Теперь с маршрутом по умолчанию

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

Он ищет действие «Коллекция» в моем контроллере «Каталог», так как я уже определил метод «Список» в контроллере «Коллекция», я не хочу переопределять его в моей «Коллекции» Тогда я попробовал это

routes.MapRoute(
            "Catalog_Collection_List", // Route name
            "Catalog/Collection/{id}", // URL with parameters
            new { controller = "Collection", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

Но результат тот же. Другая проблема заключается в том, как создать ссылку, как я упоминал выше. Я не могу использовать

@Html.ActionLink("Collection","Collection", "List", new { id = 1 })

Как это генерирует ссылку, как

Localhost/Collection/List/1   //I don’t want

Моя конечная цель состоит в том, чтобы все действия, относящиеся к «Коллекции», выполнялись под контроллером «Коллекции». я не знаю, чего мне не хватает. надеюсь, мой вопрос ясен. спасибо за любую помощь.
EDIT
делая мой вопрос более ясным. посмотрите этот образец URL

localhost/Catalog/Media/1    // which gives media for catalog
localhost/Collection/Media/1 // which gives media for collection.

Теперь, согласно обычному способу, я должен определить действие «Media» в каждом контроллере. что я не хочу. То, что я хочу, основано на URL, я хочу вызвать действие «Список» из контроллера «Медиа». Я надеюсь, что это довольно ясно.

1 Ответ

1 голос
/ 03 ноября 2011

Я испытываю затруднения из-за этой проблемы.Вы не хотите URL выше / collection / list, но это то, что вы указали в своей ссылке действия.Просматривая ваши URL, у вас есть проблема с согласованностью для начала.

«Он ищет действие» Коллекция »в моей таблице« Каталог », так как я уже определил метод« Список »в таблице« Коллекция », яне хочу переопределять то же самое в моей «Коллекции». Тогда я попробовал это «по таблице, я думаю, вы имеете в виду контроллер здесь, верно?

Так что вам следует придерживаться общего формата Url = / Controller / Action / idКоллекция / Список / 1.

Вы можете абсолютно точно отобразить это где-то еще (и порядок, безусловно, важен - первое совпадение в вашей таблице маршрутизации выигрывает) - но спросите себя, хотите ли вы пока отклониться от стандарта.

РЕДАКТИРОВАТЬ Я считаю, что вы хотите этот маршрут, добавьте его ДО других ваших маршрутов.

routes.MapRoute(
            "Catalog_Collection_List", // Route name
            "Catalog/Media/{id}", // URL with parameters
            new { controller = "Collection", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...