2011-11-13 56 views
3

我在全局文件中使用RegisterRoutes方法將用戶網址路由到實際網址。MVC 3 - ActionLink

routes.MapRoute("Blog", 
       "blog/dp/{id}", 
       new { controller ="Blog", action = "Details" }); 

正如你可能已經猜到了,博客是控制器和詳細是它的行動。

所以問題是,下面的代碼不會生成我的願望網址,其中有dp word在其url中。順便說一句,我不想​​改變我的動作名稱。

@Html.ActionLink("headline", "Details", "Blog", new { id="1200" }, null) 

在此先感謝;)

+0

url路徑是否正確?如果輸入url http:// site/blog/dp/1200,它是否會路由到正確的頁面?你有沒有其他路線映射到同一個控制器?這可能有助於在你的問題中包含所有路線。 –

+0

是的,它的路由到正確的頁面;)我的問題是,動作鏈接生成此「http://網站/博客/詳細信息?ID = 1200」 –

回答

3

您可以使用RouteLink而不是使用ActionLink。在RouteLink,你可以明確地傳遞路線名稱:

@Html.RouteLink("headline", "Blog", new { controller = "Blog", action = "Details" }) 

更多RouteLink方法可以在MSDN找到。重新排序路線可以完成這項工作,但這是一個相當脆弱的機制。

1

的ActionLink的可利用你的問題是什麼,提供了不同的路線。這條路線之前是否有任何路線申報?

路線按您提供的順序進行匹配。所以,舉例來說,如果你有這樣的事情:

routes.MapRoute("Blog", 
       "blog/dp",  // {id} is not provided in this one 
       new { controller ="Blog", action = "Details" }); 
這條路之前聲明

routes.MapRoute("Blog", 
       "blog/dp/{id}", 
       new { controller ="Blog", action = "Details" }); 

第一條路線將首先匹配,你會看到/博客/ DP/ID = 1200而不是/ blog/dp/1200。

+0

感謝您的答案,但我的MapRoutes工作正常,我的問題是, BTW,我知道我可以通過使用標籤來避開這個問題。 –