首页 文章

隐藏使用MVC中的Html.ActionLink生成的URL中的查询字符串参数名称

提问于
浏览
2

我正在使用Html.ActionLink生成链接 .

@ Html.ActionLink(item.Text,item.Author.UniqueName,“作者”,新,null)

但是,当我使用此方法时,生成的链接是:

http://localhost/Author/aeschylus?selectedQuoteId=1627

但我希望它是:

http://localhost/Author/aeschylus/1627

我的配置是:

routes.MapRoute(“AuthorQuotes”,“Author / / ”,new {controller =“AuthorQuotes”,action =“Index”,authorUniqueName = UrlParameter.Optional,selectedQuoteId = UrlParameter.Optional});

使用Html.ActionLink可以做到这一点吗?

1 回答

  • 3

    确保已将此自定义路径 before 设置为默认路径 . 此外,您似乎忘记为路线的 authorUniqueName 部分提供值 . 由于这不是路由模式的最后一部分,因此不能是可选的 .

    首先修复你的路线定义:

    routes.MapRoute(
        "AuthorQuotes", 
        "Author/{authorUniqueName}/{selectedQuoteId}", 
        new { 
            controller = "AuthorQuotes", 
            action = "Index", 
            selectedQuoteId = UrlParameter.Optional 
        }
    );
    

    然后为此必需参数提供值:

    @Html.ActionLink(
        item.Text, 
        item.Author.UniqueName, 
        "Author", 
        new { 
            authorUniqueName = item.Author.UniqueName,
            selectedQuoteId = item.QuoteID 
        }, 
        null
    )
    

    基本上,如果要在路径中包含可选参数,则这只能是最后一个 . 如果您需要有多个可选参数,那么请使用查询字符串(就像您一样),否则路由引擎无法消除它们之间的歧义 .

相关问题