Asp.net mvc 2 带有RouteValue的ActionLink创建旧的skool样式URL

Asp.net mvc 2 带有RouteValue的ActionLink创建旧的skool样式URL,asp.net-mvc-2,Asp.net Mvc 2,我的路线定义如下: routes.MapRoute( "CustomerWithScreenName", // Route name "Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule new { controller = "Customer", action = "Signup", id = "" } // Parameter defaults ); 但是

我的路线定义如下:

    routes.MapRoute(
        "CustomerWithScreenName", // Route name
        "Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule
        new { controller = "Customer", action = "Signup", id = "" } // Parameter defaults
    );
但是当我用ActionLink来建立一个链接时,就像这样:

<%: Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89", new { @class="topLink" } )%>
作为唯一的路线,连同默认的“根”,它不打球。如果专门添加了控制器名称(如上面的第一个代码段中所示),则会添加控制器名称

更新2

由于时间的限制,我放弃了我的param-before-action风格的URL,回到默认的controller\action\param-这是一个取得进步、不感到沮丧和沮丧的宏伟计划中的一件小事

更新3

我将取消所有smart ass路由的注释,尝试使用RouteLink并指定要使用的路由类型。我认为这就是RouteLink评论的理由

更新4


这不好。这要求应用程序了解要采取的路线,这意味着我失去了在将来更改路线并自动更新所有链接的选项。

首先,您使用未使用的参数定义路线,您应该这样定义路线

routes.MapRoute(
    "CustomerWithScreenName", // Route name
    "Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule
    new { controller = "Customer", action = "Signup", sn= "" } // Parameter defaults
);
<%= Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89" }, new { @class = "topLink" })%>
定义中的
sn
未在参数中定义,而是定义
id
。在默认路线之前定义路线

其次,你的ActionLink应该是这样的

routes.MapRoute(
    "CustomerWithScreenName", // Route name
    "Customer/{sn}/{action}", // e.g. Customer/KingKong89/Schedule
    new { controller = "Customer", action = "Signup", sn= "" } // Parameter defaults
);
<%= Html.ActionLink("Click here", "Schedule", "Customer", new { sn = "KingKong89" }, new { @class = "topLink" })%>

嗨,罗布,谢谢你的帮助。我已经更正了路由(id>sn),第二个是这里的输入错误,第三个是已经设置好的。它仍在生成旧的URL。我要进一步调查,你确定吗?在发布之前,我已经测试过这个,它在我这方面工作得很好。我只是再次测试以确保我在源代码中得到:
  • 。我放弃使用标准。该死,没时间了。如果我写的是MVC2,我会让每个动作通过一个属性设置自己的路线,而不是模糊匹配逻辑。再次为你的帮助干杯。谢谢。干杯,伙计,最后一件事。默认的“根”路径应该在按钮处。我不知道你是怎么想的,但我相信这对我来说是有效的