Asp.net ASP MVC-错误路由?

Asp.net ASP MVC-错误路由?,asp.net,asp.net-mvc,asp.net-mvc-3,razor,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Razor,我有一个我称之为论坛的区域,现在,在线程列表页面中,我有线程链接,它们是这样生成的: @Html.ActionLink(title, "Thread", "Forums", new { category = item.CategoryName, item = item.Id, page = 0 }, null) 现在,当我打开一个线程,并且我想从线程中获取到当前线程的链接时,我正在(在线程中)执行以下操作: 线程列表页和线程页都位于同一区域。 现在一起看两个ActionLink: 1.

我有一个我称之为论坛的区域,现在,在线程列表页面中,我有线程链接,它们是这样生成的:

@Html.ActionLink(title, "Thread", "Forums", new { category = item.CategoryName, item = item.Id, page = 0 }, null)
现在,当我打开一个线程,并且我想从线程中获取到当前线程的链接时,我正在(在线程中)执行以下操作:

线程列表页和线程页都位于同一区域。 现在一起看两个ActionLink:

   1. @Html.ActionLink(title, "Thread", "Forums", new { category = Model.Post.CategoryName, item = Model.Post.ThreadId, page = Model.Page }, null)
   2. @Html.ActionLink(title, "Thread", "Forums", new { category = item.CategoryName, item = item.Id, page = 0 }, null)
这两个ActionLink实际上是相同的(
Model
包含有效数据,我已经检查过),但它们生成的链接不同:

第一个:

http://localhost:11227/Forums/Thread/1?category=Kosz&page=0
第二个:

http://localhost:11227/Forums/Thread/Kosz/1/0
第二个生成正确的链接,而第一个。。。我不知道第一个人在干什么。它们之间唯一的区别是执行它们的位置,正如我上面所说的,第一个在线程中执行,第二个在线程列表页面中执行

我能做些什么来修复第一个链接

更新:添加的路线:

context.MapRoute(
                "Forums_thread",
                "Forums/{action}/{category}/{item}/{page}",
                new { controller = "Forums", page = UrlParameter.Optional }
            );
第二次更新我想我真的发现了一些bug?感谢艾隆的回复,我发现:

@Html.ActionLink("something", "Thread", "Forums", new { category = "Kosz", item = Model.Post.ThreadId, page = Model.Page }, null)
生成正确的链接,而这:

@Html.ActionLink("something", "Thread", "Forums", new { category = Model.Post.CategoryName, item = Model.Post.ThreadId, page = Model.Page }, null)

生成不正确的链接(
Model.Post.CategoryName
仍然是
“Kosz”
)!我不知道发生了什么…

请纠正下面的路线

context.MapRoute(
                "Forums_thread",
                "Forums/{action}/{category}/{item}/{page}",
                new { controller = "Forums",category="category", item="item",page = UrlParameter.Optional }
            );

你有哪些路线,它们有哪些限制?另外,如果您在每个调用站点中对
Html.ActionLink
执行完全相同的调用,您会得到相同的结果吗?@Eilon:我用我的路线更新了我的帖子,这是我路线列表中的第一条路线,因此使用actionlinks中的指定参数,每次都应该点击它。而且,嗯。。。你的回答给了我一些东西,我试着打电话给ExactActionLink,结果在两个网站上都是一样的。O.O现在想用它做点什么……你能试试
@Html.ActionLink(“某物”,“线程”,“论坛”,新的{category=Model.Post.CategoryName.ToString(),item=Model.Post.ThreadId,page=Model.page},null)
这样就可以确保
Model.Post>CategoryName
不为null了你遇到过路由调试器吗?这可能无法解决您的问题,但至少可以使调试更容易。这应该是一个评论。
context.MapRoute(
                "Forums_thread",
                "Forums/{action}/{category}/{item}/{page}",
                new { controller = "Forums",category="category", item="item",page = UrlParameter.Optional }
            );