如何让Url.Action不保留路由值?

apo*_*lka 3 asp.net-mvc url-routing

我有一个MVC 2.0应用程序,我有一个项目列表,可以通过他们的第一个字母浏览,我在主页面上有一个选项卡,用于整个项目列表.

我想要的是母版页上的标签总是应该去:

/items
Run Code Online (Sandbox Code Playgroud)

并且有abc的字母指向以字母开头的项目.所以例如a它应该去:

/items/a
Run Code Online (Sandbox Code Playgroud)

要为母版页中的选项卡生成链接,我使用:

Url.Action("Index", "Items")
Run Code Online (Sandbox Code Playgroud)

问题是,如果我正在查看以开头的项目a,那么我在/items/a那时标签也指向这个位置而不仅仅是/items.

任何人都知道为什么会这样,我能做些什么来始终/items使用正确的UrlHelper方法指向选项卡?

编辑:我的溃败如下:

    routes.MapRouteLowercase(
        "DefaultPrefixed",                                              // Route name
        "{controller}/{action}/{q}",                           // URL with parameters
        new { controller = "Items", action = "Index", q = "" },  // Parameter defaults
        new { q = @"[a-z]{1}" }                                        // constraint
    );

    routes.MapRouteLowercase(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 10

这取决于您的路线,但假设您使用的是默认路线:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Users", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

您始终可以将可选路径值设置为空白:

Url.Action("Index", "Items", new { id = string.Empty })
Run Code Online (Sandbox Code Playgroud)