我的页面上有一个链接,如下所示:

Url.Action("List", "Item", new { category = "seasons" })

与该页面匹配的路由也具有parentGroup和group参数

例如:/Seasons/Moober/Blue/1->/{category}/{parentGroup}/{group}/{id}

问题是,当我在该页面上并使用Url.Action时,即使我尝试仅生成到类别/{category}的链接,它也会添加所有缺少的路由值,但仍会添加parentGroup和group。

我发现this post,建议这样做:
Url.Action("List", "Item", new { category = "seasons", group = "", parentGroup = "" })

但这对我不起作用,因为它将它们从我的网址中删除,但将它们添加为参数:
/Seasons?parentGroup = Moober&group =蓝色

我正在使用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”,新的{category =“seasons”})
这次没有自动添加任何参数。

问题是我被迫使用命名路由。

最佳答案

改变你的路线

routes.MapRoute(
    "SomeRoute", // Route name
    "/{category}/{parentGroup}/{group}/{id}",
    new {
        controller = "DefaultController",
        action = "DefaultAction",
        parentGroup = UrlParameter.Optional
        group = UrlParameter.Optional
        id= UrlParameter.Optional
    }
);

将parentGroup,parentGroup和组optional设置为。

10-08 09:41