2

我注册了两条路线:

//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 链接,News 链接就变成了 domain/news/test-user-id,这不是我想要的。如何使用 mvc 路由“分离”新闻 id 和用户 id?

4

2 回答 2

0

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

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

{控制器}/{动作}/{id}

于 2012-09-29T01:12:19.683 回答
0

我不太确定为什么会发生这种情况,但我对路由有一些建议。首先,对于用户路由,删除UrlParameter.Optional, 因为它实际上不是可选的。此外,从 URL 模板中删除{controller}and {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" })
于 2012-09-29T01:52:19.813 回答