我有一个路线定义为这样:ActionLink的与routeValues创建旧斯库尔风格的URL
<%: Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89", new { @class="topLink" })%>
产生的超级链接/ URL:
routes.MapRoute(
"CustomerWithScreenName", // Route name
"Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule
new { controller = "Customer", action = "Signup", id = "" } // Parameter defaults
);
但是,当我使用的ActionLink这样制定的链接出来是这样的:
http://localhost:65071/Customer/Schedule?sn=KingKong89
它的工作原理,但我EXPE反恐执行局的ActionLink使用已知的路线和建设的正确链接具体做法是:
http://localhost:65071/Customer/KingKong89/Schedule
是我的期望错了吗?它是如何工作的参数化URL?
注意:我没有在路由中指定{controller}。我似乎无法将这条路线与更正统的{控制器} {动作} {id}路线相混合 - 也许我应该停止尝试变得聪明并采用惯例。
感谢您的帮助。卢克。
UPDATE
我有一个理论,如果没有合适的途径(包括{}控制器特殊的关键字),我将无法使ActionLink的产生正确的URL。
所以我现在把我的目光投向了为什么这个简单的路线不工作:
routes.MapRoute(
"ControllerWithScreenName", // Route name
"{controller}/{sn}/{action}", // e.g. Customer/Dave/Schedule
new { controller = "Customer", action = "Signup", sn = "" } // Parameter defaults
);
作为唯一的途径,用默认的“根”一起,它不会起球。如果控制器名称是专门添加的(如上面的第一个代码段所示)。在盛大的一个小东西 -
更新2
由于时间有限,我对我的PARAM前方的动作风格URL放弃,并回到默认的控制器\行动\参数进步的方案,而不是感到沮丧和郁闷。
更新3
我会以取消我所有的智能屁股路线和尝试使用RouteLink并指定路线使用的类型。我认为这是RouteLink评论的存在理由。
UPDATE 4
这也是白搭。这要求应用程序了解要采取的路线,这意味着我将失去将来仅改变路线的选项,并让所有链路自动更新。
喜罗布,并感谢您帮帮我。我纠正了路径(id> sn),第二个是这里的错字,第三个已经是如何设置的。它仍然在生成旧的网址。我要进一步调查。 – 2010-08-11 11:35:41
你确定吗?在我发布之前,我已经测试过这个版本,并且它在我的最后工作正常。 – 2010-08-11 11:45:32
我只是再次测试,以确保我得到: