2016-11-17 80 views
1

我們已經有了一個在ASP.NET MVC上運行的企業應用程序。我們最近開始修改應用程序的完整用戶界面。現在,當我說用戶界面,它不是簡單的CSS,我可以放在一個單獨的文件夾中並動態加載。基本上,完整的導航結構,佈局元素,一切都正在改進。但是,整體代碼(控制器,模型)與這裏和那裏的一些小改進保持幾乎相同。現在,我們應該推出改進後的用戶界面,但同時也支持並行的舊用戶界面。前端版本化ASP.Net MVC

目標是運行新的用戶界面,如appURL/v2/其餘視圖url保持不變。

現在,我們的目標是我們不應該將控制器,模型複製到另一個項目中。

那麼,根據/v2/ URL中的版本標識符,在整個應用程序中爲全局服務不同視圖的最佳方法是什麼?

回答

2

使用相同控制器可以使用不同視圖的區域。所以你創建了自己的意見,「V2」區域,並請求路由到「V2」因此:

routes.MapRoute(
    "v2_default", 
    "v2/{controller}/{action}/{id}", 
    new { area = "v2", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "YourNamespace.Controllers" } 
    ); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "YourNamespace.Controllers" } 
    ); 

使用這種結構,兩條路線將尋找在同一個命名空間中的控制器。

+0

控制器和操作是相同的,但我如何定義它需要從v2區域獲取視圖,而無需更改每個操作中的代碼並將if/else視圖。 – Vikram

+1

@Vikram視圖應根據路由值的區域進行解析。所以如果你通過'/ v2'請求一個動作,那麼應該爲這個動作訪問'Areas/v2/Views'目錄。 – CodeCaster

+0

試過了,問題在於它期望控制器和操作也被定義在「/ v2」區域中。如果v2中沒有控制器,則會引發404錯誤。任何想法,我如何將通用控制器與v2區域視圖混合? – Vikram