2012-01-18 84 views
2

我正在使用默認路由,所以我不需要指定控制器。ASP.NET MVC:出現空動作鏈接

routes.MapRoute(
    "Default", 
    "{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

有了這個,我可以創造像myapp.com/Customers而非myapp.com/Home/Customers

網址,當我在本地測試,一切都很好。當我上傳一個真人版時,任何用Html.ActionLink生成的鏈接都是空的。我知道我在正確使用Html.ActionLink,因爲它工作本地罰款:

//     Title     Action  Controller 
<%: Html.ActionLink("Manage My Settings", "Settings", "Home") %> 

我已經刪除所有路線,但默認情況下,試圖用不帶控制器等等。我甚至試圖恢復到其指定的ActionLink控制器的途徑,例如:

"{controller}/{action}/{id}" 

沒有什麼工作現場。一切工作在當地。有點生氣。

UPDATE:

OK,做了一個奇怪的發現。我實際上有另一個可選的UrlParameter ID後,稱爲頁面。我愚蠢地沒有把它包括在這個例子中,因爲我認爲它沒有任何區別。如果我把它拿出來,事情似乎有效。

所以,實際上,這個工程:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

作品!

routes.MapRoute(
    "Default", 
    "{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

這個確實工作

routes.MapRoute(
    "Default", 
    "{action}/{id}/{page}", 
    new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional, page = UrlParameter.Optional } 
); 

爲什麼不呢?

+1

關於你已部署的IIS版本與本地應用程序相同? – Serghei 2012-01-18 14:08:30

+0

IIS6在服務器上,並在本地其任何內部服務器Visual Studio 2010運行,我相信是IIS 7.5 – roryok 2012-01-18 14:23:17

+0

這是問題在我的回答下面看 – Serghei 2012-01-18 14:25:36

回答

5

找到了答案!當使用兩個連續的可選UrlParameters時,MVC3中存在一個錯誤,詳見Phil Haack,在這裏routing-regression-with-two-consecutive-optional-url-parameters

您需要首先聲明一個只有一個可選參數的路由版本。所以

routes.MapRoute(
    "Default", // Route name 
    "{action}/{id}", // URL with ONE parameter 
    new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional } // Parameter defaults 
); 

routes.MapRoute(
    "Default_with_page", // Route name 
    "{action}/{id}/{page}", // URL with TWO parameters 
    new { controller = "Home", action = "Index", 
    id = UrlParameter.Optional, page = UrlParameter.Optional } 
    // Parameter defaults 
); 

現在似乎很明顯。如果我真的包含了所有的細節,我相信Serghei或其他人會看到這個問題,所以謝謝所有幫助人員!

+0

O M G.非常感謝。我花了一個小時試圖弄清楚這一點。我認爲這是由一個子域引起的。 – 2012-06-24 00:09:45

+0

這也幫助了我。參見:http://stackoverflow.com/questions/25782089/html-actionlink-not-working-in-production-environment/26024843 – 2014-09-25 09:50:47