2011-09-21 18 views
12

Tengo un proyecto que actualicé recientemente a ASP.NET MVC 3. En mi máquina local, todo funciona bien. Cuando despliegue en el servidor, obtengo un error cada vez que uso una llamada RedirectToAction. Lanza un System.InvalidOperationException con el mensaje de error Ninguna ruta en la tabla de rutas coincide con los valores suministrados. Mi suposición es que hay algún problema de configuración en el servidor, pero parece que no puedo resolverlo.Causas de RedirectToAction "Ninguna ruta en la tabla de rutas coincide con los valores suministrados" en ASP.NET MVC 3

+1

esto significa que el redireccionamiento no coincide con ninguna ruta en su tabla de rutas, consulte la tabla de rutas en el archivo 'global.asax'. Puede agregar parámetros que no se declaran en las rutas –

+0

Proporcione más detalles sobre el 'RedirectToAction' que está fallando. Además, proporcione las rutas. – counsellorben

Respuesta

3

Tuve un problema similar una vez con RedirectToAction y descubrí que necesita una ruta válida registrada que conduzca a esa acción.

+4

Resultó ser algo con las rutas. Funcionó bien en MVC2 pero tuve que agregar una ruta adicional con un parámetro opcional menos para que funcione con MVC3. – Schmalls

2

Salida vistazo y ver si se puede conseguir un poco de ruta información de depuración: http://getglimpse.com/

0

Hay una diferencia con barras de cierre en rutas que no trabajan con MVC 3.0. MVC 2.0 no tiene un problema con ellos. Es decir, si se cambia la siguiente:

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

a:

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

debe solucionar este problema (de this thread, que funcionó para mí). Incluso cuando utiliza el asistente de actualización para pasar a MVC 3.0, esto todavía arroja InvalidOperationException. No estoy al tanto de si esto es de lo que Schmalls estaba hablando.

18

Me encontré con esto con áreas dentro de MVC3 al redirigir a través de áreas. Como han dicho otros, Glimpse es muy útil aquí.

La solución para mí fue que pase en el área dentro de la ruta de cambio de valores de parámetros:

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

a:

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

Esta es la verdadera respuesta ... Me encontré con este problema usando AttributeRouting, y aunque funciona en otras páginas sin necesidad de especificar el nombre del Área, tuve que hacerlo para este Área en particular. – jspinella

0

Se podría añadir una tabla de rutas para presentar su RouteConfig.cs como a continuación:

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); 
    } 

Nota: el "URL" es lo que se teclea en la barra de direcciones dicen: localhost:/home

Después de configurar la ruta, use RedirectToRoute("url").

O si prefieres RedirectToAction() entonces no necesitas configurar la ruta anterior, utiliza los valores predeterminados. RedirectToAction(string action name, string controller name);

Espero que esto ayude.

Cuestiones relacionadas