Asp.net mvc ASP.NET MVC:出现空操作链接

Asp.net mvc ASP.NET MVC:出现空操作链接,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,我使用的是默认路由,因此不需要指定控制器 routes.MapRoute( "Default", "{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 有了它,我可以创建像myapp.com/Customers这样的URL,而不是像myapp.com/Home/Customers这样的URL 当我在本地测试时,一切正常。当我上传一个

我使用的是默认路由,因此不需要指定控制器

routes.MapRoute(
    "Default", 
    "{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
有了它,我可以创建像myapp.com/Customers这样的URL,而不是像myapp.com/Home/Customers这样的URL

当我在本地测试时,一切正常。当我上传一个实时版本时,用Html.ActionLink生成的所有链接都是空的。我知道我正确地使用了Html.ActionLink,因为它在本地运行良好:

//                   Title                 Action      Controller
<%: Html.ActionLink("Manage My Settings", "Settings", "Home") %>
没有东西是活的。一切都在本地运行。有点疯了

更新:

好吧,有个奇怪的发现。实际上,我在id之后有另一个可选的UrlParameter,称为page。我愚蠢地没有把它包括在例子中,因为我认为它没有什么区别。如果我把它拿出来,一切似乎都正常

所以,实际上,这是可行的:

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

但这是行不通的


为什么不呢

看看这篇解释的文章

找到了答案!当使用两个连续的可选UrlParameters时,MVC3中有一个bug,Phil Haack在这里详细介绍了这一点

您首先需要声明一个只有一个可选参数的路由版本。所以

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或其他人会看到这个问题,所以感谢所有的帮助

在IIS的哪个版本上,您已经在服务器上部署了与localy?IIS6相同的应用程序,并且在本地部署了Visual Studio 2010运行的任何内部服务器,我相信这是iis7.5。这是我下面的答案中的问题。它以前在IIS6上运行过什么?在你拒绝Serghei的回答之前,你应该遵循这些步骤。MVC不能在IIS 6上开箱即用。你能澄清一下“空”是什么意思吗?链接是这样的吗?非常感谢你。我花了一个小时想弄明白。我认为这是由一个子域名引起的。这也帮助了我。见:
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 }
);
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
);