2012-01-18 30 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

相关问题