2011-06-13 94 views
6

我們有一個現有的功能齊全的ASP.NET MVC 2應用程序。我正在創建一個MVC 3應用程序,該應用程序應該與現有應用程序具有相同的外觀和感覺。也就是說,它應該使用相同的導航ascx,頁眉和頁腳ascx等。現有的應用程序的ascx基於模型中的內容填充自己,因此它不是「僅」我想要引入的UI內容,而是模型以及與這些控件有關的控制器邏輯。在MVC應用程序之間共享視圖,邏輯等

有沒有什麼好的方法可以做到這一點,而不需要大量重構原來的應用程序?我聽說過Portable Areas(http://lostechies.com/erichexter/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib/),但看起來這需要一個重要的重構在現有的應用程序。我還研究過Razor單一文件生成器擴展,它允許我們將視圖編譯爲dll並共享它們,但是,這需要將現有的應用程序轉換爲MVC 3,然後將視圖轉換爲Razor。 (而且我還不確定在那之後它會一定很「容易」。)

我可以忽略任何明顯的東西嗎?它只是覺得應該有一個很好的方法來做到這一點,但也許現有的應用程序只需要大修。 :P

在此先感謝!

+4

可能重複(http://stackoverflow.com/questions/4800819/sharing-controllers-and-views-with-multiple-web-applications) ,我看到的唯一區別是Razor而不是常規View Engine的繼承。 – 2011-06-14 00:12:52

+0

謝謝,看起來你是對的。 – dizzwave 2011-06-14 16:20:37

回答

1

最簡單的解決方案可能是將視圖更新爲MVC3(如果您未與不能使用.NET 4的某些內容集成在一起,則容易忽略),並在將視圖移至共享庫時將視圖轉換爲Razor。 Razor視圖引擎在內部與Web表單視圖引擎有許多不同之處,使得它更容易適應共享庫的使用。

在我自己的項目中,我有預編譯的視圖引擎處理所有視圖,但很容易設置多個視圖引擎,以便第一個找到有效視圖將被使用。對於佈局,您需要爲這兩個視圖引擎保留一個版本,但如果您在將所有視圖一次轉換爲Razor時遇到問題,那麼這不是多餘的額外工作。

共享控制器邏輯相當簡單。在您的共享庫中定義控制器,並將其在控制器文件夾中進行分類,系統將查找控制器。

+0

很酷,謝謝。這和RazorSingleFileGenerator擴展一樣嗎?如果沒有,你能否提供一個更全面描述如何去做你所談論的內容的鏈接? – dizzwave 2011-06-14 16:16:27

+0

我使用命令行工具而不是單個文件生成器和更多自定義視圖引擎,但是,它基本上是同一件事。 – 2011-06-14 21:21:58