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

后端 未结 6 1227
春和景丽
春和景丽 2021-02-19 08:41

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 Redirec

相关标签:
6条回答
  • 2021-02-19 09:04

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

    0 讨论(0)
  • 2021-02-19 09:06

    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.

    0 讨论(0)
  • 2021-02-19 09:15

    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.

    0 讨论(0)
  • 2021-02-19 09:20

    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" });
    
    0 讨论(0)
  • 2021-02-19 09:20

    In my case, default route was missing:

    routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    
    0 讨论(0)
  • 2021-02-19 09:30

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

    0 讨论(0)
提交回复
热议问题