MVC4 - 不记住路由值

时间:2012-11-30 23:00:00

标签: c# .net razor asp.net-mvc-4 asp.net-routing

这是我的路线设置:

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等上阅读的所有内容都说应该保留路由值。好吧,我每次都通过指定所有路由值来解决这个问题,但这很糟糕。

为什么我的路线值不被保留?

编辑我的答案不太对劲。在另一种观点/情况中,那里的规则不适用。任何人都可以绝对肯定地解释何时记住路线值的规则?

路线让我疯狂。

1 个答案:

答案 0 :(得分:3)

事实证明(感谢Robert Harvey)确保所有路线参数都具有默认值(根本不是任何东西)意味着视图会生成记住当前路线值的链接。

我想指出这确实令人困惑:默认值不用于任何事情,但需要指定它们以便记住这些值!

唯一的一点是,它只记得第一个指定其值的参数。之后的任何参数都会丢失(即使是那些具有非默认值的参数)。

所以目前的答案是:为所有路由参数指定一些(任何!)默认值,并记住为所需参数指定新值,以及在路径URL中跟随它们的任何值。