Я также видел эту ошибку, когда непреднамеренно назвал модуль с тем же именем, что и один из стандартных модулей Python. Например. У меня был модуль под названием commands
, который также является модулем библиотеки Python. Это оказалось трудно отследить, так как он корректно работал в моей локальной среде разработки, но с ошибкой при работе в Google App Engine не удался.
не смешивайте правило вроде: "{action} / {id}"
с правилом "{controller} / {action} / {id } "
... особенно, когда id в последнем имеет значение по умолчанию, т.е. является необязательным.
В этом случае у вас нет ничего, что позволяло бы маршрутизации узнать, какой из них правильный для использования.
Обходной путь , если это то, что вам нужно, можно было бы добавить ограничение (см. this ) к действию в предыдущем наборе значений, например, List, View. Конечно, с этими типами правил у вас не может быть контроллера с тем же именем действия.
Также помните, что если вы укажете действие и идентификатор по умолчанию в правиле "{action} / {id}"
, это будет использоваться при переходе по маршруту вашего сайта.
Почему в первом 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") %>
Вы можете различить, указав контроллер и мы '