2012-04-11 30 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時考慮了定義的路線。