本文所說的Web Form指的是基於.net 平臺開發網站的框架(咱們一般稱之爲:Asp.net),Web Form實際上分爲兩個部分:Web Form(可視化界面)和Asp.Net(後臺web組件)。全部System.Web.UI.*命名空間下的能夠稱爲Web Form ,System.Web.*命名空間下的能夠稱爲Asp.net。Asp.net誕生於2002年初,Web Form以前的微軟Web 開發技術有ASP,ASP把業務邏輯和標語語言(html)代碼混合在頁面裏,Web Form對ASP開發人員來講是一個全新變化,Web Form將大部分服務器端代碼移到一個類文件中,而且用動態服務器控件代替HTML標籤,Web Form不只可讓業務邏輯和標語語言代碼分離,還提供了更強大的開發平臺:net 框架,能夠快速開發web程序,好比能夠拖放控件。
儘管Asp.net提升了性能而且改進了調試體驗,可是仍是有不少問題。
首先,Web Form System.Web命名空間的部件是緊耦合的,Web Form仍然關注在網頁上,雖然代碼能夠移植到其餘地方,但仍然難以作到業務邏輯和用戶視圖分離,在Web Form架構下,每一個網站的URL由單個的物理文件.aspx表示,並且每一個頁面與頁面代碼類緊密耦合,頁面沒法動態選擇本身的綁定類,代碼類沒法渲染別的視圖,頁面代碼類中的代碼也不可能進行單元測試。
其次,管理狀態和數據是任何程序很是重要的內容,但web程序的通訊是基於http協議的,http協議是一個無狀態的協議,並且是非持續鏈接,每一個請求對應一個客戶端請求和一服務器應答。web服務器必須分開處理每一個請求,所以沒法知道客戶端請求的先後消息,這樣服務器與客戶端沒法進行有效的會話,web應用程序這種無狀態特性使得管理狀態數據變得很是複雜,舉個例子:實現一個多步用戶註冊web應用程序就比單步註冊要多作許多的工做量,若是作成從下一步還能回到上一步,工做量更是要成倍增長,增長的工做量就是由於要記錄程序狀態。爲了在無狀態的中介中實現有狀態的會話,Web Form 引入了視圖狀態的概念,視圖狀態把服務器與客戶端的交互狀態存儲的頁面的隱藏域中,視圖狀態讓服務器與客戶端交互變得簡單,可是它包含的數據可能會很臃腫,佔用帶寬,即便是很簡單的頁面,大小也可能超過100KB。
基於上面的Web Form 的一些缺點及其餘的一些緣由,隨着ajax技術的流行,ASP.NET框架上出現了一些新的web開發技術:
目前ASP.NET開發網站主要有三種方式:
第一:用aspx,服務器控件、C#這類技術來實現:
採用這種方式開發 服務端要作的事情不少,HTML的生成, 簡單的JS交互,客戶端驗證,等等,全由服務端來處理,全部頁面的生成以及交互的邏輯所有服務端來完成,頁面與用戶的交互性一般不會很友好,好比:提交數據時常常會刷新整個頁面。
第二:頁面+AJAX方式:
這種方式頁面只是呈現數據, 表單的提交全採用AJAX方式了。這樣作的好處能將顯示邏輯與數據更新邏輯有效的分離,沒必要糾纏在一塊兒, 在這種開發模式下,因爲頁面只負責數據的顯示,所以,只要能將業務邏輯儘量地與UI分離,項目在維護上會容易不少, 採用這種方式開發的網站,頁面與用戶交互的友好性會好不少,並且也不會影響SEO,所以被較多的門戶網站採用。
在ASP.NET中有一種比較原始的實現Ajax的方式,那就是建立一個ashx,也有人會選擇建立一個空的aspx去代替ashx,並且使用aspx還能夠只輸出一個HTML片斷。
第三:純AJAX網,在這類網站中,服務端因爲不參與UI處理,網站能夠只是些靜態的HTML文件, 並且在設計頁面時,只要留下一些佔位符就能夠了,UI元素所有由JS來生成。 這類網站的客戶端一般會選擇一個JS的UI框架來支持。這類界面相對於前二種來講,會更漂亮,用戶的操做體驗也會更友好。 但因爲頁面主要由JS來生成,對SEO的支持較差,所以,特別適合一些後臺類的網站項目。
在前面所列的第2、第三種開發方式中,若是有一個合適的框架,會對開發工做有着很是重要的影響,在AJAX的發展過程當中,微軟曾經推出過ASP.NET AJAX框架,它能夠在服務端生成一些JS的代理類,讓客戶端的JS能夠直接調用服務端的方法。 雖然那個框架設計地很巧妙,而且與WebForm配合的很完美,只惋惜那個框架不夠流行。 後來的WCF經過一些配置也可讓JS去調用,不過,喜歡的人也很少,可能仍是由於配置麻煩的緣故吧。 當後來微軟推出了ASP.NET MVC框架時,一些人開始驚呼:AJAX非ASP.NET MVC框架不可。 由於ASP.NET MVC框架能夠很容易讓JS去調用一個C#方法,今後之後,不再用去【讀參數,調用方法,寫輸出】這些繁瑣的事情了, 並且沒有WCF那麼複雜的配置。 的確,他們沒有解決的問題,ASP.NET MVC框架很好地解決了。
微軟推出的ASP.NET MVC框架,初版在2009年發佈。ASP.NET MVC是基於MVC模式(模型-視圖-控件器)的架構,ASP.NET MVC與ASP.NET相同點在於他們的基礎構架都是.Net,它們共享HTTP處理程序(handler)和模塊(module),HTTP處理程序仍然會在ASP.NET MVC上下文中發揮做用, 事實上ASP.NET MVC管道自己正是從HTTP處理程序處理外部程序開始的,使用ASP.NET MVC簡化了 Web Form應用程序開發的複雜部分,同時保留了ASP.NET管道的能力和靈活性,雖然ASP.NET MVC與ASP.NET有一些共同的東西,可是ASP.NET MVC是一種全新的編程模式,一種徹底不一樣的架構,它具備鬆耦合,易擴展,高可維護的優勢。與上面所說的ASP.NET 的缺點相比,ASP.NET MVC視圖與邏輯是分離的,URL不是基於頁面文件而是基於路由,依賴路由動態映射外部的URL到正確的控制器操做上,並容許操做動態指定要顯示給用戶的視圖,服務器頁面變成簡單的視圖,它只是等待控制器傳遞的對象填充的HTML模板,再也不有回傳事件生命週期,數據模型、應用程序邏輯和數據表現的關注點被清晰的分離。ASP.NET MVC拋棄了頁面視圖(View state),而是利用緩存與會話狀態,ASP.NET MVC能夠減小頁面內容,可是可能增長後臺處理請求和數據庫請求的成本。Web Form 徹底能夠只用務器端控件開發整個頁面而不使用HTML標籤,因此Web Form視圖依賴於服務器控件來渲染HTML代碼,而ASP.NET MVC徹底能夠不用服務器控件控件,所以它要求開發者編寫更多的HTML代碼,用Razor語法的代碼來渲染HTML代碼,用HTML幫助方法(HtmlHelper)寫HTML代碼,開發人員能夠直接在視圖裏調用它的方法。 html