ASP.NET MVC 3 RC 2路由问题

时间:2010-12-13 19:47:56

标签: asp.net asp.net-mvc asp.net-mvc-routing

我从

更改了ASP.NET MVC中的默认路由
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

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

但现在所有@ Html.ActionLink()调用都呈现为href =“”。如果我将路由更改回默认值,则所有链接都会再次运行。

我使用与RC1相同的路线,它运作良好。

我在发布文档中没有找到任何内容,所以我认为我做错了。

此致   斯特芬

1 个答案:

答案 0 :(得分:2)

在路线中,可选参数只能出现在最后。这意味着在您的路线定义中,id参数不能是可选的。您需要将其明确设置为值。

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

当您生成链接时,如果您希望此路由匹配,则必须始终为id参数提供值:

@Html.ActionLink("some link", "index", new { id = "123" })

作为替代方案,您可以为id参数提供默认值:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}/{lineNo}",
    new { 
        controller = "Home", 
        action = "Index", 
        id = "123",
        lineNo = UrlParameter.Optional 
    }
);

现在您不再需要在链接中指定它。