Estoy tratando de escribir un prototipo realmente simple de un sistema CMS usando ASP.Net MVC 3.¿Cómo consigo que este enrutamiento ASP.NET funcione correctamente?
El sistema tiene un solo controlador con dos acciones: mostrar y crear.
El formato para la acción 'Mostrar' está destinado a tomar hasta 5 partes opcionales, p. domain.com/part1/part2/part3/part4/part5
El formato para la acción 'Mostrar' es similar, pero debe tener una parte principal 'crear', p. domain.com/create/part1/part2/part3/part4/part5
tengo la siguiente configuración en mi global.asax:
routes.MapRoute(
"CreatePageRoute",
"create/{part1}/{part2}/{part3}/{part4}/{part5}",
new
{
controller = "Page",
action = "Create",
part1 = UrlParameter.Optional,
part2 = UrlParameter.Optional,
part3 = UrlParameter.Optional,
part4 = UrlParameter.Optional,
part5 = UrlParameter.Optional
});
routes.MapRoute(
"Default",
"{part1}/{part2}/{part3}/{part4}/{part5}",
new
{
controller = "Page",
action = "Show",
part1 = UrlParameter.Optional,
part2 = UrlParameter.Optional,
part3 = UrlParameter.Optional,
part4 = UrlParameter.Optional,
part5 = UrlParameter.Optional
}
);
Si mi método de 'Mostrar' no encuentra una página que coincida con el ruta suministrada, devuelve una página 'no encontrada' que incluye una opción para crear una nueva página con la ruta suministrada. Este enlace se define utilizando la siguiente:
@Html.ActionLink("Yes", "Create")
[el "Sí" representa la respuesta a la pregunta "¿qué quieres crear una página para esta ruta"]
Así que cuando se prueba el 'defecto 'ruta, veo que mi 'acción show' se llama con éxito para todas las vías de acceso siguientes: {vacías} un a/b a/b/c a/b/c/d a/b/c/d/e
que es genial.
Sin embargo, el enlace 'crear' resultante generado por la instrucción "@ Html.ActionLink (" Sí "," Crear ") da resultados inconsistentes. Parece generar un hipervínculo diferente según la duración de la entrada. Los resultados son los siguientes:
Por ruta "{vacío}", el enlace ofrece "localhost {: puerto} /" - que estaba esperando "localhost {: puerto}/crear"
Por ruta "/a ", el enlace ofrece" localhost {: port}/"- Esperaba" localhost {: port}/create/a "
Para la ruta"https://stackoverflow.com/a/b ", el enlace ofrece" localhost { : puerto}/a "Esperaba" localhost {: port}/create/a/b "
Para la ruta"https://stackoverflow.com/a/b/c ", el enlace ofrece" localhost {: port}/a/b "- Esperaba" localhost {: port}/create/a/b/c "
Para la ruta "/ a/b/c/d", el enlace ofrece "localhost {: port}/create/a/b/c/d" - que es lo que esperaba
Para ruta "https://stackoverflow.com/a/b/c/d/e", el enlace ofrece "localhost {: puerto}/crear/a/b/c/d/e" - que es lo que estaba esperando
¿por qué sólo trabajo cuando proporciono "/ a/b/c/d" o "/ a/b/c/d/e"?
sé que estoy siendo idiota, por favor me
arena
Hace un tiempo tuve un problema similar. Intenta cambiar 'UrlParameter.Optional' por' '' ' – Omar