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 }
);