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