我有一个项目,我最近升级到ASP.NET MVC 3.在我的本地计算机上,一切正常。当我部署到服务器时,每次使用RedirectToAction
调用时都会收到错误消息。它抛出System.InvalidOperationException
错误消息路由表中没有路由与提供的值匹配。我的假设是服务器上存在一些配置问题,但我似乎无法能够搞清楚。
答案 0 :(得分:21)
当我跨区域重定向时,我遇到了MVC3中的区域。正如其他人所说,Glimpse在这里非常有用。
我的解决方案是在路径值参数更改中传递区域:
return RedirectToAction("ActionName", "ControllerName");
为:
return RedirectToAction("ActionName", "ControllerName", new { area = "AreaName" });
答案 1 :(得分:6)
我曾在RedirectToAction
遇到类似的问题,并发现您需要注册的有效路线才会导致该操作。
答案 2 :(得分:3)
查看一瞥,看看是否可以获得一些路由调试信息: http://getglimpse.com/
答案 3 :(得分:1)
您可以将路由表添加到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);
}
注意:“网址”是您在地址栏中输入的内容:localhost:/ home
设置路线后,请使用RedirectToRoute("url")
。
或者如果您更喜欢RedirectToAction()
,那么您不需要设置上述路线,请使用默认值。
RedirectToAction(string action name, string controller name)
;
我希望这会有所帮助。
答案 4 :(得分:0)
与不使用MVC 3.0的路由中的尾部斜杠存在差异。 MVC 2.0对它们没有问题。即,如果您更改以下内容:
"{controller}.mvc/{action}/{id}/"
为:
"{controller}.mvc/{action}/{id}"
它应该解决这个问题(来自this thread,为我工作)。即使您使用升级向导移动到MVC 3.0,仍然会抛出InvalidOperationException
。我不知道这是否是Schmalls所说的。
答案 5 :(得分:0)
在我的情况下,缺少默认路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);