我在页面中有一个链接,如下所示:
Url.Action("List", "Item", new { category = "seasons" })
与该页面匹配的 Route 也有 parentGroup 和 group 参数
例如:/Seasons/Moober/Blue/1 -> /{category}/{parentGroup}/{group}/{id}
问题是当我在该页面上并使用 Url.Action 时,即使我尝试生成仅指向类别 /{category} 的链接,它也会添加所有缺少的路由值,它仍然会添加 parentGroup 和组。
我找到了这篇文章,建议这样做:
Url.Action("List", "Item", new { category = "seasons", group = "", parentGroup = "" })
但它对我不起作用,因为它将它们从我的网址中删除,但将它们添加为参数:/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 = "seasons" }) 这一次没有自动添加参数。
问题是我被迫使用命名路由。