У меня есть проект, который я недавно обновил до ASP.NET MVC 3. На моей локальной машине все работает нормально. Когда я развертываю сервер, я получаю сообщение об ошибке при использовании вызова RedirectToAction
. Он выдает сообщение System.InvalidOperationException
с сообщением об ошибке. В таблице маршрутов маршрут не соответствует указанным значениям. Мое предположение заключается в том, что на сервере существует некоторая проблема с конфигурацией, но я не могу понять это.
RedirectToAction Причиняет "Нет маршрута в таблице маршрута соответствует предоставленным значениям" в ASP.NET MVC 3
Ответ 1
У меня была аналогичная проблема с RedirectToAction
и выяснилось, что вам нужен действительный маршрут, который ведет к этому действию.
Ответ 2
Я столкнулся с этим с областями внутри MVC3 при перенаправлении по областям. Как говорили другие, Glimpse здесь очень полезен.
Решение для меня состояло в том, чтобы передать в Районе значение параметра параметров маршрута:
return RedirectToAction("ActionName", "ControllerName");
в
return RedirectToAction("ActionName", "ControllerName", new { area = "AreaName" });
Ответ 3
Посмотрите, посмотрите и посмотрите, можете ли вы получить информацию об отладке маршрута: http://getglimpse.com/
Ответ 4
Там разница с трейлинг-косой чертой в маршрутах, не работающих с MVC 3.0. У MVC 2.0 нет проблем с ними. I.e., если вы измените следующее:
"{controller}.mvc/{action}/{id}/"
в
"{controller}.mvc/{action}/{id}"
он должен исправить это (от этот поток, работал у меня). Даже когда вы используете мастер обновления для перехода на MVC 3.0, это все равно бросает InvalidOperationException
. Я не знаю, говорил ли это об этом Schmalls.
Ответ 5
Вы можете добавить таблицу маршрутов в файл RouteConfig.cs, как показано ниже:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
var namespaces = new[] { typeof(HomeController).Namespace };
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("name", "url", new { controller = "controllerName", action = "actionName" }, namespaces);
}
NB: "url" - это то, что вы набрали в адресной строке: localhost:/home
После настройки маршрута используйте RedirectToRoute("url")
.
Или, если вы предпочитаете RedirectToAction()
, вам не нужно настраивать вышеуказанный маршрут, используйте значения по умолчанию.
RedirectToAction(string action name, string controller name)
;
Надеюсь, это поможет.