如何做这些类型的MVC路由?

时间:2012-09-24 13:10:34

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

我注册了两条路线:

//News page routing with optional news article ID
routes.MapRoute(
name: "News",
url: "news/{id}",
defaults: new { controller = "News", action = "Index", id = UrlParameter.Optional }
);

将默认链接(无ID)生成为:@Html.ActionLink("News", "Index", "News")

//User page routing with User ID
routes.MapRoute(
name: "Profile",
url: "{id}/{controller}/{action}",
defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);

将链接生成为:

[a href="@Url.Action("Index", "Account", new RouteValueDictionary(new { id = "test-user-id" }))"]Me[/a]

到目前为止一切顺利,我的新闻链接创建为域/新闻和工作,而我链接创建为域/测试用户ID并且也可以。

但是一旦我访问Me链接,新闻链接就变成了domain / news / test-user-id,这不是我想要的。如何使用mvc routing“分隔”新闻ID和用户ID?

2 个答案:

答案 0 :(得分:0)

在新闻链接中,您的网址首先是控制器,然后是操作。

您应该在Me链接中遵循相同的模式。即

{控制器} / {行动} / {ID}

答案 1 :(得分:0)

我不太确定为什么会这样,但我对路由提出了一些建议。首先,对于用户路由,请删除UrlParameter.Optional,因为它实际上不是可选的。另外,请从网址模板中删除{controller}{action},因为它们不是必需的。

//User page routing with User ID
routes.MapRoute(
    name: "Profile",
    url: "{id}",
    defaults: new { controller = "Account", action = "Index" }
);

其次,使用@Url.RouteUrl代替@Url.Action作为个人资料链接,因为这更准确地定位了路由规则。

新闻

@Html.RouteLink("News", "News")

配置文件

@Url.RouteUrl("Profile", new { id = "test-user-id" })