2009-02-12 242 views
30

我應客戶的請求構建了一個包含ASP.NET Web窗體的大型站點。問題是,我發現ASP.NET Web表單有點不直觀(我個人的口味)。所以我想要做的就是使用MVC,但我不能指望我的客戶爲完成重寫而付出時間(他也沒有時間)。我可以使用ASP.NET MVC與常規的ASP.NET Web窗體

所以我問的是,我可以同時使用ASP.NET MVC和Web窗體,並逐漸使用MVC越來越多?有小費嗎?

回答

16

更新2014:

的Visual Studio 2013使我們更接近一個ASP.NET。 沒有MVC 項目類型或Web窗體項目,只有ASP.NET。如果您想要混合Web窗體和Web API,或者MVC和SignalR,請繼續! 您受到鼓勵和支持。新功能和功能是 與NuGet帶來沒有打破現有的應用程序。

VS 13

所以Web Forms和MVC(已幾乎被無縫地工作)的混合,現在鼓勵和邊界模糊。我想MS認識到需要允許項目慢慢遷移到MVC,或者根據需要遷移部分,並獲得兩全其美。


MVC項目:

已經使用MVC的Web窗體相當長的一段時間肯定是可能的,一個很好的選擇。通過良好的體系結構設計(例如DDD(服務存儲庫,依賴注入等)),可以將新功能和頁面輕鬆添加到MVC頁面中,並且舊的功能可以保持原樣。在一個webforms頁面中組合MVC也可以正常工作,儘管JS驗證可能存在一些小問題。我會極力推薦它。

從創建一個MVC應用程序(5個atm)開始,然後在啓動並運行基本模板後,在文件夾內添加舊的webforms。這樣您就可以正確地獲得新的MVC設置,並保持向後兼容性。

  • 您可以創建一個MVC項目,並將所有Webforms頁面複製到一個文件夾。 (可能只是升級一個項目,我會想象)
  • 設置路由忽略URL中具有該特定文件夾名稱的請求。這樣,MVC和webforms可以一起使用,而不會在URL中造成麻煩。
  • Asp.net WebForms aspx頁面可以駐留在MVC中,只要它們不在/ Views文件夾中。
  • 在舊的語法中使用Razor,您可以輕鬆地自定義HTML助手,並且它更加乾淨。
  • 檢查MVC標準和約定,控制器應該非常輕便。它不是可以包含儘可能多的邏輯的代碼隱藏。
  • 意見不應包含除表示邏輯(沒有業務邏輯)
  • 一切新的東西=> MVC
  • 資源,web.config文件等都是由這兩個
  • 菜單使用不使用舊的站點地圖的在MVC

使用MVC一個web表單內.aspx頁:

下面的文本旨在演示如何從webforms頁面內部使用MVC。 (例如,在MyPage.aspx中)您可以在webforms中使用MVC動作/視圖。 ajax來填充頁面或某些div的一部分。

包含MVC的Webforms工作正常,至少在HTML中添加ajax調用以填充MVC的div時。

裏面一個.aspx

..html & webforms code 

<div id="fillMeFromMVC"> 
    <script type="text/javascript"> 
    $.ajax(... call an MVC action to fill 
     the "fillMeFromMVC" div that this script sits inside of); 
</script> 
</div> 

這將填補通過MVC的頁面的一部分,你可以清晰地做你的MVC,而不用擔心什麼在網絡表單完成。

的WebForms與MVC:但是這裏

通過這一點,你可能很瞭解這兩種技術之間的差異,是他們之間的一個小比較。他們都有自己的目的和用途。我個人比較喜歡MVC,因爲我需要做的事情,但這可能取決於你想要達到的目標。

如果您使用例如在他們身後的SOA和Web頁面都可以使用相同的業務邏輯。 當代碼全部位於頁面後面並與UI相關聯時(無需分離關注點),Webforms可能是有害的。有了可靠的體系結構和一些可以減少的努力。

延伸閱讀:

Webforms vs. MVC (Code project)

Difference betweeen ASP.NET WebForms and ASP.NET MVC (a blog)

+0

我認爲你是錯的,因爲MVC`RouteCollection`有這個設置叫做'RouteExistingFiles`這是'默認FALSE`。這意味着如果您訪問現有的aspx頁面(並且它不駐留在** Views **文件夾內(本地web.config阻止對文件的直接請求訪問),它應該作爲日常WebForm處理。 – 2012-05-09 08:40:18

相關問題