2010-02-04 205 views
39

是否可以創建一個MVC根應用程序(帶有主頁和主題的門戶)並添加一對基於WebForms的子項目(我們已經有一個現有的WebForms應用程序,我們希望將其集成到門戶網站)?將ASP.Net MVC與WebForms結合使用

你將如何集中導航(站點地圖,網址路由)?
你會如何分享主頁?
你會如何參考資源(〜問題等)?

解決方案,如一個described here似乎有些過時

回答

5

以上大答案。您可以考慮的另一件事是從ASP.NET遷移到ASP.NET MVC,在這種情況下,this post might help you將遷移項目文件。

16

作爲參考,我昨天成功地完成了這項任務 - 將MVC功能添加到現有的WebForms網站,即 - 我認爲如果它對任何人都有用處,我會寫。人們說:「最好的方法是將你的web表單應用程序重寫爲MVC」,但當應用程序已經建立並且隨着時間的推移已經成長爲相當怪物的時候,通常沒有商業案例。以及我可能會添加)。就我而言,我們被要求在這個應用程序中實現一個新的功能 - 並且最近在其他項目中一直在MVC中開發 - 我想在MVC中構建這個新功能。這是我做過什麼:

  1. 創建一個新的ASP.NET MVC 4應用和選擇的空模板(剃刀)

  2. 加載後,右鍵單擊參考>瀏覽並導航至我現有網站的Bin文件夾。然後我添加了我在現有站點中使用的DLL。作爲參考,我使用了AjaxControlToolkit,因此決定從NuGet中添加最新的一個。然後這應該自動更新web.config文件

  3. 然後我打開了Windows資源管理器並導航到我現有的網站的根文件夾。然後,我使用Visual Studio複製現有站點的頂級文件夾結構(減去Bin文件夾),從而導致2個站點具有相同的頂級文件夾(但具有MVC App_Start,控制器,模型的新項目和「視圖」文件夾,但顯然不是Bin)。

  4. 設置完成後,我從Windows資源管理器中的相應頂級文件夾複製子文件夾和文件,並將它們粘貼到解決方案中。如果你這樣做,該項目允許您直接複製子文件夾和內容,通過Visual Studio添加現有項目只複製文件,從而節省時間。請注意:根文件夾,我確實不副本在web.config中的Global.asax,但在所有其他文件複製(如Default.aspx的,等等)

  5. 一旦所有內容爲複製後,我在現有站點的新項目和web.config中打開了web.config。我複製到新的web.config任何特定於現有網站(appSettings,connectionStrings,名稱空間,成員信息等)。這同樣適用於Global.asax文件。

  6. 我試圖構建並修復了我錯過的任何東西。

  7. 一旦一切是正確的(我曾經擊落死亡數黃屏)我注意到,我得到了加載的Default.aspx當頁面未找到錯誤。這是下降到路由,這裏是我的路由信息​​(位於Global.ascx MVC 3,或App_Start> RouteConfig.cs MVC 4)所做的更改:

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
        // This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine 
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 
        routes.IgnoreRoute("{resource}.aspx"); 
    
        // Important change here: removed 'controller = "Home"' from defaults. This is the key for loading 
        // root default page. With default setting removed '/' is NOT matched, so default.aspx will load instead 
        routes.MapRoute(
         name: "Default", 
         url: "{controller}/{action}/{id}", 
         defaults: new { action = "Index", id = UrlParameter.Optional } 
        ); 
    } 
    

隨着採取所有這些步驟,該網站像往常一樣加載並運行,但我現在有一個ASP.NET WebForms和MVC混合。我確信有可能更簡單的方法來完成這項任務,但我嘗試了其他方法並失敗。這種方式花了我大約20分鐘,我已經起來跑步...好吧,坐下來,編碼:)

0

我在這種情況太困難了,畢竟我得到了一個解決方案,首先複製web.config在您的查看文件夾。

打開Route.config(Routeconfig)文件後,在那裏你會找到一個方法RegisterRoutes,保持它,因爲它是和創建一個名爲RegisterRoutes2()另一種方法,然後複製粘貼MVC應用以下方法代碼:

public static void RegisterRoutes2(RouteCollection routes) 
{...} 

在某些情況下mvc應用程序中的方法名稱將爲RegisterRoutes。 如果上面的代碼不起作用,請從機器的mvc應用程序複製粘貼。 然後,請轉至global.asax文件,您會發現RegisterRoutes()已被調用,現在簡單,也請撥打RegisterRoutes2()。 完成後,重新啓動應用程序或清理構建,它將運行。