【发布时间】:2012-08-22 00:07:38
【问题描述】:
我发现路由有些奇怪...
我正在 Visual Studio Web Express 2012 中测试 MVC3 应用程序
- 我创建了一个新的 MVC3 应用程序来隔离问题
-
我在默认路由之前添加了以下路由:
routes.MapRoute( "default_localization", "{language}/{country}/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); -
然后没有任何其他更改(创建项目后没有任何区域,只有初始文件),我运行了应用程序,乍一看一切正常。由于它是一个新应用程序,因此页面顶部有两个链接:
- 首页
- 关于
动作链接如下所示:
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
那么这就是正在发生的事情:
-
当浏览器 URL 为:
http://localhost:54870/- 主页链接是:
http://localhost:54870/ - 关于链接是:
http://localhost:54870/Home/About
HTML
<li><a href="/">Home</a></li> <li><a href="/Home/About">About</a></li>没关系
- 主页链接是:
-
但点击About链接后,浏览器网址为:
http://localhost:54870/Home/About- 主页链接变为:
http://localhost:54870/Home/About - about 链接变为:
http://localhost:54870/Home/About/Home/About
即使链接出错,它们仍然会执行正确的操作。
HTML
<li><a href="/Home/About">Home</a></li> <li><a href="/Home/About/Home/About">About</a></li> - 主页链接变为:
如果我删除我的自定义路由,一切都会按预期工作
为什么会这样?
我该如何解决?
【问题讨论】:
-
您没有为国家和语言设置默认值。也许这导致了“混乱”,......
-
我在想类似的事情,但我的逻辑告诉我,由于我的路线包含两个标记(语言和国家),因此该路线不应匹配仅指定控制器和操作标记的路线,因此应该选择默认路线......但这没有发生。我错过了什么?
-
你试过在浏览器中查看html页面的源代码吗?您的 About 中有什么链接?
-
我刚刚添加了两种情况下呈现的 HTML 以及 ActionLink 的生成方式
标签: c# asp.net-mvc asp.net-mvc-3