使用UrlParameter.Optional时,MVC3路由会记住最后一个参数值

时间:2012-12-29 10:07:17

标签: asp.net-mvc-3 routing

我的其中一条路线的可选参数有问题。路线看起来像这样:

            routes.MapRoute(
            "VideoList", // Route name
            "VideoList/{page}", // URL with parameters
            new { controller = "Video", action = "VideoList" , page = UrlParameter.Optional}
        );

第一次使用时效果很好:

@Html.RouteLink("Video", "VideoList", null, new { id = "idVideo", @class = "menu-item" })

控制器操作取代页面参数得到NULL,我在操作中处理休息。

然后,我玩网页,我再次尝试相同的路由,这次指定'page'参数,让我们说它带有值7。

@Html.RouteLink("Video", "VideoList", new { page = 7 }, new { id = "idVideo", @class = "menu-item" })

它也可以按预期工作,但是当我再次尝试使用没有指定'page'的路由时,由于某种原因上次再次使用此参数的值,这是7

不确定原因。我希望它首次通过将null传递给控制器​​来获取此参数

如果需要,我会提供更多信息。

1 个答案:

答案 0 :(得分:2)

这就是路由的工作原理。如果您不希望RouteLink从当前请求路由值中获取它,则需要显式设置参数:

@Html.RouteLink("Video", "VideoList", new { page = "" }, new { id = "idVideo" })

这将始终生成/VideoList个网址。如果未将page参数显式设置为空字符串(如第一个示例中所示),则帮助程序将在生成链接时分析当前请求路由值。如果当前网址为/VideoList/7,则帮助程序将保留所有路由值并生成/VideoList/7