ActionLink是否考虑了Global.asax路由?

时间:2012-04-11 17:30:28

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

我有这样的行动:

@Html.ActionLink(dinner.Title, "Details", new { id=dinner.DinnerID }) 

和如此定义的路线:

routes.MapRoute(
                    "PrettyDetails",
                    "{Id}",
                        new { controller = "Dinners", action = "Details" },
                        new { Id = @"\d+" }
                    );

操作链接呈现<a href="/234">My Dinner</a>

为什么链接中不显示"Details"?是因为它知道Global.asax中定义的路由,因此以某种方式匹配模式吗?

由于

2 个答案:

答案 0 :(得分:2)

  

为什么链接中不显示“详细信息”?

因为您在Global.asax中定义的路由模式是{Id},其中id必须是整数。所以,回答你的问题,是的,Html.ActionLink助手尊重你在Global.asax中定义的路线。

如果您希望能够传递与details不同的操作,则必须修改您的模式。例如:{action}/{id}。显然,控制器部分也是如此。

如果您不希望评估按Global.asax中的路由定义顺序进行,则可以使用Html.RouteLink来指定路由名称。这样您就可以定位特定路线。当然,你传递的论点必须与这条路线保持一致。

答案 1 :(得分:2)

答案是“是”,ActionLink在呈现URL时会考虑定义的路线。