【问题标题】:MVC3 routing remembers last parameter value when using UrlParameter.OptionalMVC3 路由在使用 UrlParameter.Optional 时会记住最后一个参数值
【发布时间】:2012-12-14 08:58:44
【问题描述】:

我对其中一条路线的可选参数有疑问。路线是这样的:

            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 代替页面参数,我在动作中处理休息。

然后,我使用网页并再次尝试相同的路由,这次指定“页面”参数,假设它的值为 7。

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

它也可以按预期工作,但是当我再次尝试使用未指定“页面”的路由时,由于某种原因,它再次携带上次用于此参数的值,即 7

不知道为什么。我希望它通过将 null 传递给该参数的控制器来作为第一次工作

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

【问题讨论】:

    标签: asp.net-mvc-3 routing


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢达林。在某些时候,我尝试将 null 分配给 RouteLink 中的页面参数。它非常接近:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2012-01-29
    • 2012-10-07
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多