Tengo un enlace en una página que dice así:Url.Action() incluye parámetros deseados, tratando de tener más control
Url.Action("List", "Item", new { category = "seasons" })
La ruta que coincide con la página también tiene un parentGroup y los parámetros del grupo
Ej:/Estaciones/Moober/azul/1 ->/{categoría}/{parentGroup}/{grupo}/{id}
El problema es cuando estoy en esa página y el uso de Url.Action, agrega todos los valores de ruta faltantes incluso cuando intento generar un enlace a las categorías solo/{categoría}, aún agregará parentGroup y grupo.
he encontrado this post, que sugiere hacerlo de esta manera:
Url.Action("List", "Item", new { category = "seasons", group = "", parentGroup = "" })
Pero no funciona para mí, ya que los elimina de mi url, pero los agrega como parámetros:? /Estaciones parentGroup = Moober & group = Azul
Estoy usando MVC3. ¿Hay alguna manera de forzar a Url.Action() a usar solo los parámetros provistos o cancelar los que no quiero?
Aquí están las rutas.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ItemFromCategoryParentGroupSubGroup", // Route name
"{category}/{parentGroup}/{group}/{id}/{language}", // URL with parameters
new { controller = "Item", action = "Show", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
parentGroup = _validGroup,
group = _validChildGroup,
id = _validItemInChildGroup
}
);
routes.MapRoute(
"ItemListFromParentGroup", // Route name
"{category}/{parentGroup}/{group}/{language}", // URL with parameters
new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
parentGroup = _validGroup,
group = _validChildGroup
}
);
routes.MapRoute(
"ItemWithGroup", // Route name
"{category}/{group}/{id}/{language}", // URL with parameters
new { controller = "Item", action = "Show", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
group = _validGroup,
id = _validItemInGroup
}
);
routes.MapRoute(
"ItemListWithGroup", // Route name
"{category}/{group}/{language}", // URL with parameters
new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
group = _validGroup
}
);
routes.MapRoute(
"ItemListFromCategory", // Route name
"{category}/{language}", // URL with parameters
new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory
}
);
Editar:
tengo una solución para el momento en que se ve así: Url.RouteUrl ("ItemListFromCategory") básicamente estoy forzando la misma ruta que se supone debe ir acompañada de Url.Action ("Lista", "Artículo", nuevo {category = "seasons"}) Y esta vez no se agregaron parámetros automáticamente.
El problema con esto es que estoy obligado a utilizar rutas con nombre.
¿nos puede mostrar sus rutas? – frennky
Puedo, solo espero que no sean demasiado largos. – Emanuel