【问题标题】:MVC: ActionLink Remembers ID Field?MVC:ActionLink 记住 ID 字段?
【发布时间】:2012-07-13 22:36:01
【问题描述】:

这是早期 stackoverflow 问题 (link text) 的后续问题。

如果您使用以 {id} 结尾的默认路由定义,那么如果您有一个 ActionLink,其目标与生成 ActionLink 所在页面的方法相同,则框架会自动在回调 url 中包含 id,即使你没有要求。

例如,如果您正在显示来自以下 URL 的页面:

http://www.somedomain.com/AController/SameMethod/456

页面 cshtml 文件具有如下所示的 ActionLink:

@Html.ActionLink("some text", "SameMethod", ARouteValueDictionary, SomeHtmlAttributes)

那么无论你是否在 ARouteValueDictionary 中包含“id”,它都会显示在生成的 URL 中。

仅当您回调到最初生成页面的相同方法时才会发生这种情况。如果您在同一个控制器上回调不同的方法,{id}​​ 字段不会插入到生成的 URL 中。

我不一定有这个问题。但我很好奇为什么设计师采用了这种方法。

仅供参考,我发现此功能是因为我无意中在我的网站设计中依赖它。我必须将 ID 字段连同一堆其他信息一起传回服务器……只是我从未将 ID 信息显式添加到 RouteValueDictionary。但是因为我的大多数回调都是针对最初生成页面的相同操作方法,所以无论如何我都包含了信息。

当一个新组件(我确信它与已经工作的组件“基本相同”)失败时,您可以想象我的惊讶。但是因为新组件有不同的目标操作方法,所以魔法消失了。

编辑:

修改了解释,以阐明在生成的 URL 中包含 {id} 字段取决于调用与首先生成页面相同的方法。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    ...框架自动在回调 url 中包含 id, 即使你没有要求。

    我更喜欢“环境”这个词,而不是“自动”。您可以将 URL 中已有的路由标记视为 HtmlHelper 和 UrlHelper 的“环境”。

    但我很好奇设计师为什么采用这种方法。

    考虑一个组合在一起的控制器,比如 5 个动作。这 5 个可能彼此有链接,但在组外没有很多链接。最简单的 Html.Action 重载只需要 2 个参数:要呈现的文本和动作名称。

    这使得在这些视图中链接从一个动作到另一个动作的简写。由于它们都在同一个控制器上,并且该控制器已经在当前操作的路径中,因此当您未在辅助方法中指定控制器名称时,MVC 会重用此值。相同的行为扩展到 {id} 或您定义的任何其他路由标记。

    【讨论】:

    • 丹,感谢您的快速回复。我在最初的问题中没有强调的是,在 ActionLink 生成的 URL 中包含 {id} 字段取决于调用与用于生成 ActionLink 所在页面的方法相同的方法。在同一个控制器上调用不同的操作方法不会导致包含 {id} 字段。这就是我遇到我必须编码的问题的方式。所以“环境效率”的论点并不完全站得住脚。
    • “我更喜欢环境这个词而不是自动” - 你说番茄,我说番茄。
    猜你喜欢
    • 2011-04-23
    • 2012-05-13
    • 1970-01-01
    • 2012-04-26
    • 2016-03-04
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多