2012-06-20 152 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」); –