C# MVC3URL参数呈现

C# MVC3URL参数呈现,c#,asp.net-mvc-3,asp.net-mvc-routing,C#,Asp.net Mvc 3,Asp.net Mvc Routing,我有这张路线图: routes.MapRoute( "ViewNews", "{controller}/{action}/{id}/{title}", new { controller = "Home", action = "NewsDetail", id = "", title = "" } ); 在我看来,这个ActionLink: @Html.ActionLink(Model.Title, "News

我有这张路线图:

routes.MapRoute(
            "ViewNews",
            "{controller}/{action}/{id}/{title}",
            new { controller = "Home", action = "NewsDetail", id = "", title = "" }
        );
在我看来,这个ActionLink:

@Html.ActionLink(Model.Title, "NewsDetail", new { id = Model.Id, title = Url.ToFriendlyUrl(Model.Title) })
我希望它呈现出这样的效果:

http://localhost:49327/Home/NewsDetail/1/news-title
相反,它呈现:

http://localhost:49327/Home/NewsDetail/1?title=news-title
我想念什么

更新

我已通过以下方式将MapRoute移动到默认值之前:

routes.MapRoute(
        "ViewNews",
        "{controller}/{action}/{id}/{title}",
        new { controller = "Home", action = "NewsDetail", id = "", title = "" }
        );


routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}", // URL with parameters
            new { controller = "Home", action = "Index" } // Parameter defaults

        );
但现在当我请求初始URL时:

http://localhost:49327/Home
我立即被重定向到:

http://localhost:49327/Home/NewsDetail/1/news-title
“NewsDetail”已成为默认操作


确保
Model.Id
参数不为null或空,并且默认路由不在Global.asax中显示的路由之前。您需要将其删除或放置在此自定义路线之后。

此答案可能会帮助您,以及@Darin的答案:这很正常。这两条路线相互排斥。您需要定义一些约束。例如,如果ID始终为数字,则可以在第一条管线上定义数字正则表达式约束。