Schmalls
Schmalls

Reputation: 1474

RedirectToAction Causes "No route in the route table matches the supplied values" in ASP.NET MVC 3

I have a project that I recently upgraded to ASP.NET MVC 3. On my local machine, everything works fine. When I deploy to the server, I get an error anytime I use a RedirectToAction call. It throws a System.InvalidOperationException with the error message No route in the route table matches the supplied values. My assumption is that there is some configuration problem on the server, but I can't seem to be able to figure it out.

Upvotes: 14

Views: 40506

Answers (6)

ErTR
ErTR

Reputation: 905

In my case, default route was missing:

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Upvotes: 0

John Kennedy
John Kennedy

Reputation: 23

You could add a route table to your RouteConfig.cs file like below:

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: the "url" is what you'd type into the address bar say: localhost:/home

After setting up the route, use RedirectToRoute("url").

Or if you'd prefer the RedirectToAction() then you don't need to set up the above route, use the defaults. RedirectToAction(string action name, string controller name);

I hope this helps.

Upvotes: 1

Al Stevens
Al Stevens

Reputation: 519

I ran into this with areas within MVC3 when redirecting across areas. As others have said, Glimpse is very useful here.

The solution for me was to pass in the Area within the route values parameter changing:

return RedirectToAction("ActionName", "ControllerName");

to:

return RedirectToAction("ActionName", "ControllerName", new { area = "AreaName" });

Upvotes: 23

Abel
Abel

Reputation: 57149

There's a difference with trailing slashes in routes not working with MVC 3.0. MVC 2.0 doesn't have a problem with them. I.e., if you change the following:

"{controller}.mvc/{action}/{id}/"

to:

"{controller}.mvc/{action}/{id}"

it should fix this (from this thread, worked for me). Even when you use the upgrade wizard to move to MVC 3.0, this still throws InvalidOperationException. I'm not aware whether this is what Schmalls was talking about though.

Upvotes: 0

Adam Tuliper
Adam Tuliper

Reputation: 30152

Check out glimpse and see if you can get some route debugging information: http://getglimpse.com/

Upvotes: 3

user840210
user840210

Reputation:

I had a similar problem once with RedirectToAction and found out that you need a valid route registered that leads to that action.

Upvotes: 4

Related Questions