2012-06-20 157 views
0

我正在开发一个将旧的.aspx页面转换为新的MVC页面的项目。我目前使用路由功能来映射现有的旧版页面,以便在幕后使用更新的MVC页面。这很好,因为它保留了现有的URL,但是,无论何时控制器需要重定向用户或使用MVC Url.Action链接,它向用户发送的URL是MVC url而不是路由的传统页面url 。我意识到这是它假设如何运作的,但我想知道MVC是否具有某种“反向路由”功能。通过反向路由,我正在寻找允许Url.Action(“action”)以指定操作而不是默认/ controller/action链接返回路由的.aspx关联url的内容。MVC3反向路由

因此,举例来说,

这里是一个示例路线

context.MapRoute("AboutUs", "pages/aboutus.aspx", new { controller = "default", action = "aboutus" }); 

这使得domain.com/pages/aboutus.aspx运行新的MVC行动从DefaultController幕后“公司简介”完美。

然而,如果另一个MVC页面上我已经创建了一个链接通过

Url.Action("aboutus") 

它指向他们domain.com/mvc/aboutus。我希望它将它们指向domain.com/pages/aboutus.aspx,以保持整个网站的统一性。

感谢您提供的任何见解。我可能最终不得不重写Url.Action方法来查找路由并返回映射的url,但我只是想检查现有的功能,所以我不重新发明轮子。

+0

这可能是一个愚蠢的问题,但为什么你会想要将用户重新导向您想要替换的网址?如果执行此映射的唯一原因是为了保留现有的链接/书签到您的网站,那么您的用户肯定已经发现您的网站是不够的? –

+0

好问题。不是因为MVC运行在旧的.aspx页面后面,而是将它们重定向到这些页面。我希望这样做主要是为了在用户体验在地址栏中跳转时不在地址栏中看到不同的URL。我还担心搜索引擎不喜欢我在两个不同的页面上“重复内容”,但我现在意识到规范URL可以解决这个问题。 joshuam建议使用Url.RouteUrl(“aboutus”)完美地完成了这个技巧。感谢大家的帮助和投入! –

+0

此外,如果这有助于任何人通过谷歌找到这个。 CakePHP具有类似的功能,他们称之为“反向路由”。 CakePHP更自动地处理它,但我也喜欢微软所做的。 –

回答

1

尝试使用RouteUrl扩展方法,该航线由航线名称,而不是路由参数相匹配,就像这样:

Url.RouteUrl("aboutus") // route name 

MSDN:http://msdn.microsoft.com/en-us/library/dd460347

+0

这正是我所期待的。 另外,对于我的控制器中的重定向,我正在使用: return RedirectToRoute(“action”); –