У меня есть ссылка на странице, которая выглядит так:
Url.Action("List", "Item", new { category = "seasons" })
Маршрут, соответствующий этой странице, также имеет параметры parentGroup и group.
Пример: /Seasons/Moober/Blue/1 -> /{category}/{parentGroup}/{group}/{id}
Проблема в том, что когда я нахожусь на этой странице и использую Url.Action, он добавляет все отсутствующие значения маршрута, даже когда я пытаюсь создать ссылку только на категории /{category}, он все равно добавит parentGroup и группу.
Я нашел этот пост, который предлагает это сделать нравится:
Url.Action("List", "Item", new { category = "seasons", group = "", parentGroup = "" })
Но у меня это не работает, поскольку удаляет их из моего URL-адреса, но добавляет их в качестве параметров: /Seasons?parentGroup=Moober&group=Blue
Я использую MVC3. Есть ли способ заставить Url.Action() использовать только предоставленные параметры или отменить те, которые мне не нужны?
Вот маршруты.
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
}
);
Редактировать:
На данный момент у меня есть обходной путь, который выглядит так: Url.RouteUrl("ItemListFromCategory") Я в основном заставляю тот же маршрут, который должен сопоставляться Url.Action("List", "Item", new { category = "сезоны" }) И на этот раз никакие параметры не добавляются автоматически.
Проблема в том, что я вынужден использовать именованные маршруты.