2008-09-28 56 views
5

我有類似路線的asp.net MVC應用程序:Asp.Net MVC:如何讓Html.ActionLink正確呈現整數值?

routes.MapRoute("Blog", 
    "{controller}/{action}/{year}/{month}/{day}/{friendlyName}",       
    new { controller = "Blog", action = "Index", id = "", friendlyName="" }, 
    new { controller = @"[^\.]*", 
      year = @"\d{4}", 
      month = @"\d{2}", 
      day = @"\d{2}" } 
); 

我控制器操作方法簽名如下所示:

public ActionResult Detail(int year, int month, int day, string friendlyName) 
{ // Implementation... } 

在我看來,我做類似:

<%= Html.ActionLink<BlogController>(item => item.Detail(blog.PostedOn.Year, blog.PostedOn.Month, blog.PostedOn.Day, blog.Slug), blog.Title) %> 

儘管ActionLink生成的URL有效,但它使用查詢字符串變量而不是URL重寫。

例如,它會產生/博客/詳細信息/我的段塞?年= 2008 &月= 7 &天= 5,而不是/博客/細節/ 2008/07/05 /我的段塞

有沒有辦法讓ActionLink的通用版本正確地填充整數值,以便網址按預期發佈?

感謝

吉姆

回答

2

我建議格式化年,月,日和字符串作爲代替。想想這個:你會對這些「整數」做任何數學嗎?可能不會,所以把它們變成整數是沒有意義的。 將它們作爲字符串之後,您可以強制使用前導零格式。

+0

雖然不是一個最佳的解決方案,但我知道這會起作用 – 2008-09-28 20:18:24

4

您的參數是整數的事實與您的問題無關。您要使用的路由定義並未實際使用,這就是生成的URL使用查詢字符串參數而不是構建所需結構的原因。

從上到下評估路由,所以您可能有一個更通用的路由定義可以滿足您請求的URL生成。嘗試將你在這篇文章中顯示的路線移動到路線定義的頂部,你會發現你生成的鏈接和你期望的一樣。然後着眼於修改路線定義,以便更具體,或者根據需要移動它們。

調試這些類型的場景可能是一個巨大的痛苦。我建議下載Phil Haack的route debugger,它會讓你的生活變得更輕鬆。

+0

這條路線位於頂部,毫無疑問。不過,我會看看調試器。 – 2008-09-28 19:16:24

相關問題