2012-04-11 27 views
1

我有像这样的动作:ActionLink是否考虑Global.asax路线?

@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

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

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

如果您希望能够通过与details不同的操作,您将不得不修改您的模式。例如像这样:{action}/{id}。显然,控制器部分也是如此。

您可以使用Html.RouteLink,它允许您指定一个路由名称,如果您不想按照Global.asax中的路由定义顺序进行评估。这样你可以定位一个特定的路线。当然,你传递的论据必须与这条路线相一致。

+1

操作链接是否读取global.asax或是内存中的路由?只是想知道它如何知道要渲染什么? – Jon 2012-04-11 18:20:38

+1

一旦应用程序启动,路由就会存储在内存中。 – 2012-04-11 19:17:15

+0

谢谢,这是有道理的 – Jon 2012-04-11 19:48:59

2

答案是肯定的,ActionLink在渲染URL时考虑了定义的路线。