ASP.NET MVC Маршрутизация с контроллером по умолчанию

Я также видел эту ошибку, когда непреднамеренно назвал модуль с тем же именем, что и один из стандартных модулей Python. Например. У меня был модуль под названием commands, который также является модулем библиотеки Python. Это оказалось трудно отследить, так как он корректно работал в моей локальной среде разработки, но с ошибкой при работе в Google App Engine не удался.

14
задан ozziepeeps 25 August 2011 в 11:45
поделиться

2 ответа

не смешивайте правило вроде: "{action} / {id}" с правилом "{controller} / {action} / {id } " ... особенно, когда id в последнем имеет значение по умолчанию, т.е. является необязательным.

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

Обходной путь , если это то, что вам нужно, можно было бы добавить ограничение (см. this ) к действию в предыдущем наборе значений, например, List, View. Конечно, с этими типами правил у вас не может быть контроллера с тем же именем действия.

Также помните, что если вы укажете действие и идентификатор по умолчанию в правиле "{action} / {id}" , это будет использоваться при переходе по маршруту вашего сайта.

16
ответ дан 1 December 2019 в 09:13
поделиться

Почему в первом URL в новом списке все еще есть "Клиент". Я предполагаю, что это опечатка, и вы имели в виду:

У меня работают следующие маршруты:

routes.MapRoute(
    "CustomerSearch"
    , "Search/{query}/Page/{page}"
    , new { controller = "Customer", action = "Search" }
);

routes.MapRoute(
    "CustomerGeneric"
    , "{action}/{id}/Page/{page}"
    , new { controller = "Customer" }
);

//-- Default Route
routes.MapRoute(
    "Default",
    "{action}/{id}",
    new { controller = "Customer", action = "Index", id = "" }
);

Как вы генерируете свои ссылки . Поскольку контроллера больше нет в URL-адресе вашего маршрута (иначе говоря, у вас нет "{controller}" в URL-адресе маршрута), но это значение по умолчанию, вам необходимо обязательно указать контроллер при создании маршрутов.

Таким образом, вместо

Html.ActionLink("LinkText", "ActionName")

сделать

Html.ActionLink("LinkText", "ActionName", "Customer")

Почему? Предположим, у вас есть следующие маршруты.

routes.MapRoute(
    "Default",
    "foo/{action}",
    new { controller = "Cool" }
);

routes.MapRoute(
    "Default",
    "bar/{action}",
    new { controller = "Neat" }
);

Какой маршрут вы имели в виду, когда вызывали его?

<%= Html.ActionLink("LinkText", "ActionName") %>

Вы можете различить, указав контроллер и мы '

10
ответ дан 1 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: