ASP.Net MVC: Entonces, espere ... ¿El parámetro de ruta predeterminado tiene que ser nombrado id?

StackOverflow https://stackoverflow.com/questions/1004331

  •  05-07-2019
  •  | 
  •  

Pregunta

¿Alguien más ha tenido este problema? Tengo que estar haciendo algo mal.

Así que estoy configurando una ruta para errores como este:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);

Y llamando como:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));

Y en el controlador:

public ActionResult Error(String error)

Simple ¿verdad? Bueno, cuando esto se ejecuta realmente, el error es nulo a pesar de que la url parece:

/ Shared / Error / ThisIsTheError

Pero el parámetro de error en el método de error es nulo. (Y sí, he intentado otras palabras)

Ahora, si sustituyo todo eso con la palabra 'id', todo funciona.

Global.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);

Redireccionar:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));

Controlador compartido:

public ActionResult Error(String id)

¿Es id. debe tener una palabra para todas las rutas si tiene una ruta predeterminada que toma un valor?

¿Fue útil?

Solución

Siempre debe especificar el controlador y los parámetros de acción:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);

Supongo que la razón por la que el uso de la identificación te funciona es porque todavía tienes la ruta predeterminada registrada, que tiene la identificación como parámetro y los valores predeterminados para el controlador y la acción.

Tenga en cuenta que, si aún tiene la ruta predeterminada, asegúrese de agregar su ruta antes , de lo contrario, coincidirá con la otra primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top