我正在使用默认路由,因此我不需要指定控制器。
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}"
没有什么能有效。一切都在当地工作。有点生气。
更新
好的,发现了一个奇怪的发现。我在id之后实际上有另一个可选的UrlParameter,称为page。我愚蠢地没有在示例中包含它,因为我认为它没有任何区别。如果我把它拿出来,事情似乎有效。所以,实际上,这有效:
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 }
);
为什么不呢?
答案 0 :(得分: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或其他人会看到这个问题,所以感谢所有的帮助!
答案 1 :(得分:1)