【发布时间】: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} 字段取决于调用与首先生成页面相同的方法。
【问题讨论】: