这是早期 stackoverflow 问题(链接文本)的后续。
如果您使用以 {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} 字段取决于调用与首先生成页面相同的方法。