这是我的路线设置:
routes.MapRoute(
name: "MyRoute",
url: "Secret/{source}/{display}/{sort}/{tags}/{filter}/{pageSize}/{page}",
defaults: new { controller = "Secret", action = "Index", page = 1, filter = "-", tags = "-" },
namespaces: new[] { "SomeProject.Controllers" }
);
当我访问此网址时:
http://localhost:12345/Secret/SourceHere/Gallery/Score/-/-/26
我的观点有这个标记:
<a href="@Url.Action("Index", new { tags = @tagInfo.Tag })">
然后链接中的结果URL是:
http://localhost:12345/Secret?tags=hello
虽然我找不到它的官方文档,但我在SO,Google等上阅读的所有内容都说应该保留路由值。好吧,我每次都通过指定所有路由值来解决这个问题,但这很糟糕。
为什么我的路线值不被保留?
编辑我的答案不太对劲。在另一种观点/情况中,那里的规则不适用。任何人都可以绝对肯定地解释何时记住路线值的规则?
路线让我疯狂。
答案 0 :(得分:3)
事实证明(感谢Robert Harvey)确保所有路线参数都具有默认值(根本不是任何东西)意味着视图会生成记住当前路线值的链接。
我想指出这确实令人困惑:默认值不用于任何事情,但需要指定它们以便记住这些值!
唯一的一点是,它只记得第一个指定其值的参数。之后的任何参数都会丢失(即使是那些具有非默认值的参数)。
所以目前的答案是:为所有路由参数指定一些(任何!)默认值,并记住为所需参数指定新值,以及在路径URL中跟随它们的任何值。