2011-10-25 44 views
4

我閱讀過大部分(如果不是全部)關於將MVC 3添加到現有webforms站點的文章。我已經對webforms站點的全局asax進行了更改,以支持MVC以及對web.config的更改。但是仍然存在一些問題。使用現有的Webforms站點運行MVC

  1. MVC 3是貪婪的 - 默認情況下,它需要在網站的根目錄,使導航到根我去爲MVC,而不是web表單頁面的入口頁面這是我想要的。在導航到根目錄時要清楚,我希望它轉到mysite.com/default.aspx。要解決站點根我添加

    routes.MapPageRoute(「SiteRoot」,「」,「〜/ Default.aspx的」) 然而,這則打破了MVC的URL,使得我最終搞砸網址像

    http://localhost:86/default?action=Index&controller=Blog 我該如何解決這個問題,使網站的根目錄轉到webforms default.aspx,並仍然有我的MVC網址是正確的?

  2. MVC 3打破了Webform使用的HttpHandlers的關係。具體來說,我使用處理程序將遠期過期頭添加到圖像和資源處理程序以組合樣式表和JavaScript文件。 RegisterRoutes中任何路由的絕對存在都會破壞這些處理程序,因此樣式表不會通過資源處理程序加載,並且我失去了將來的過期時間,並且有一個httpcompression模塊也會停止工作。那麼如何維護webforms的httphandlers和模塊,同時仍然保留站點MVC 3部分的路由?

這兩個問題我沒有看到任何人在各種博客文章中有關混合MVC3和webforms的地址。

哦,我有routes.IgnoreRoute(「{resource} .aspx/{* pathInfo}」)在global.asax中。資源處理程序使用一個aspx文件擴展名,所以我會認爲這個排除在全球範圍內的hanlder會工作,但我猜不是。

我知道的另一個選擇是在wbeforms站點內建立一個文件夾,並將其作爲自己的應用程序起點運行 - 但是,我最終得到了一個我並不真正想要的網址,如site.com/blog/blog/index第一個博客是作爲自己的應用程序點運行的文件夾,第二個博客是控制器。

回答

1

我可以找到的最佳解決方案是而不是混合MVC 3與現有的webforms網站。相反,將MVC目錄設置爲自己的應用程序起點,然後從該文件夾運行MVC,以便它和現有的webforms應用程序完全不知道對方。以這種方式,資源處理程序和httpmodules以及其他處理程序仍然適用於webforms站點。這樣,域根目錄會默認轉到webforms default.aspx而不是MVC。我也沒有把這個入口放入global.asax,然後又搞砸了mvc 3的url。接下來的問題是處理這些網址,這樣我就沒有網址lke blog/blog/post/1。爲了解決這個問題,我將html操作鏈接更改爲

@Html.ActionLink(item.PostTitle, "Post", New With {.id = item.PostId}, Nothing) 

然後對全局進行更改。ASAX - 更改默認的路由(直接刪除{控制器}:現在不是博客/博客/指數或博客/博客/

routes.MapRoute(_ 
     "Default", _ 
     "{action}/{id}", _ 
     New With {.controller = "Blog", .action = "Index", .id = UrlParameter.Optional}, New String() {"RiderDesignMvcBlog.Core.Controllers"}) 

所以後/ 1,我得到一個合適的乾淨URL,而不在重複的博客url - blog/post/1

0

我建議你將處理程序的擴展名更改爲真正的處理程序.ASHX,而不是忽略它們。

+0

好的,謝謝,我會試試看。 –

相關問題