本書是由臺灣知名博客站長與暢銷書作者“Will保哥”所撰寫的ASP.NET MVC 4開發(fā)指南,融入作者多年實務開發(fā)工作之精髓,從基礎觀念、技術講解、開發(fā)實例、開發(fā)技巧到安裝部署,都將以深入淺出的例子帶領讀者理解ASP.NET MVC框架的精妙之處,讓網(wǎng)站生成工作更加安全、快速,也更容易維護!
本書共分11章,第1章講解通用的MVC特性,第2章講述正確的開發(fā)觀念,第3章以一個簡單的例子帶領讀者快速上手ASP.NET MVC,第4~8章分別介紹了ASP.NET MVC最重要的核心觀念與技術解析,其中包括路由與生命周期、模型、控制器、Razor視圖引擎技術、本地技術等,第9章則以更高級的方式完成一套完整的電子商務網(wǎng)站開發(fā)實例,第10章分享筆者多年累積的各種開發(fā)技巧,第11章詳述如何部署ASP.NET MVC到正式環(huán)境。
本書適合有ASP.NET窗體開發(fā)經(jīng)驗的開發(fā)人員閱讀,書中的演示能清楚帶領讀者快速了解ASP.NET MVC的開發(fā)細節(jié)與觀念,相信能為讀者帶來全新的視野,輕松排查網(wǎng)站開發(fā)過程中衍生的各種難題。
Will保哥作品,必屬精品!啥也不說了,請搜索關鍵詞“Will保哥”!
作 者 序
大家好,我是Will保哥,當前任職于臺灣多奇數(shù)位創(chuàng)意有限公司,擔任技術總監(jiān)一職,負責公司技術方向的決策。大約從4年多前我開始注意到,ASP.NET MVC這門技術在國外漸漸發(fā)展起來,起初不覺得有什么特別的地方,但慢慢地看到了一些國外討論的開發(fā)觀念與設計樣式,好像真的能夠解決當時ASP.NET Web Form開發(fā)上的困擾點,例如,內(nèi)建的控件不好用、控件套版不易、抽象的ASP.NET Web Form事件模型常常讓開發(fā)人員搞不清楚狀況、太大的ViewState等,這些都是我們?nèi)粘i_發(fā)工作會遇到的問題。
直到2009年初,ASP.NET MVC 1.0正式版上市,除了還在創(chuàng)建與維護中的ASP.NET Web Form項目不會改動之外,我毅然決然地帶領公司所有開發(fā)人員轉(zhuǎn)向ASP.NET MVC的懷抱,并宣告未來所有新項目皆以ASP.NET MVC技術為主。這是一個重大的決定,也是一個至今從未后悔的決定。對我來說,學習一門全新的技術時,動機”很重要,而且當你接觸一門新技術必須要放棄許多以往的開發(fā)經(jīng)驗時,如果沒有明確的動機與察覺轉(zhuǎn)變的價值,很難讓人改變,因此要進入一個全新技術的領域,首要任務就是先感受技術的價值,然后再進一步深入研究技術的細節(jié)。
這本書是《ASP.NET MVC 2 開發(fā)實戰(zhàn)》這本書的火力加強版,兩年多前寫人生第一本書時,從決定要寫,到寫完歷時一年多的時間,并且當時ASP.NET MVC版本也從ASP.NET MVC 1.0升級到ASP.NET MVC 2.0,由于ASP.NET MVC的觀念與架構十分優(yōu)秀與嚴謹,因此技術升級的過程非常順利,也因為ASP.NET MVC的開發(fā)觀念不需要重新創(chuàng)建,所以當時在學習ASP.NET MVC 2.0的時候也沒什么太多負擔。
時至今日,ASP.NET MVC又升級了兩版,來到當前最新的ASP.NET MVC 4.0版,如同我兩年前的預測一樣,新的ASP.NET MVC 3.0與ASP.NET MVC 4.0與早期ASP.NET MVC 1.0與ASP.NET MVC 2.0的兼容性都非常好,其開發(fā)觀念也都完全一致,對于早期投入ASP.NET MVC研究的人來說,并不會帶來多大學習壓力,只要另外學習新版帶來的新功能與新特性即可。
新版的ASP.NET MVC 3.0與ASP.NET MVC 4.0也如大家所預期的,微軟持續(xù)不斷地在ASP.NET MVC架構上增強功能,并且不斷地強化Visual Studio工具的支持,例如,當前最新版的Visual Studio 2012的Page Inspector功能,就能幫助ASP.NET MVC開發(fā)人員在不同的View之間快速切換,開發(fā)除錯的效率大幅提升,因此,筆者依然認為ASP.NET MVC在未來還是非常具有發(fā)展前景。
這些年來,我們公司已經(jīng)全面轉(zhuǎn)型使用ASP.NET MVC開發(fā)各種大大小小的項目,現(xiàn)在創(chuàng)建的網(wǎng)站不但更加安全、開發(fā)速度更快、項目創(chuàng)建完成的時間更短,以及最重要的是網(wǎng)站變得更容易維護,質(zhì)量也更高了,這都要歸功于ASP.NET MVC的技術架構所賜,因為ASP.NET MVC非常強調(diào)“關注點分離”的概念,而且從開發(fā)架構上來看就很容易讓開發(fā)人員做到“關注點分離”,這個優(yōu)勢是ASP.NET Web Form完全無法匹敵的。有趣的是,當我問公司里的工程師:“你以后還想要寫ASP.NET WebForm嗎?”他給我的回答竟然是:“保哥,我回不去了。”
筆者整理這幾年累積的ASP.NET MVC開發(fā)經(jīng)驗與教學經(jīng)驗,希望本書的出版能帶給所有ASP.NET開發(fā)人員另一個全新且優(yōu)秀的選擇,就讓我們一起擁抱ASP.NET MVC的世界吧!
黃保翕( Will保哥)
多奇數(shù)位創(chuàng)意有限公司:http://www.miniasp.com/
我的博客:http://blog.miniasp.com/
The Will Will Web-記載著Will在網(wǎng)絡世界的學習心得與技術分享
Will保哥的新浪微博:http://www.weibo.com/cnwill
本書源碼下載:
https://dl.dropboxusercontent.com/u/1011445/MVC4SampleCode.zip
ASP.NET MVC問世已久,幾年前或許有人會擔心ASP.NET MVC框架是否能用在實務的項目上,也擔心用在新項目上是否真的能改善開發(fā)效率與質(zhì)量,但筆者這幾年下來,已經(jīng)累積數(shù)十個網(wǎng)站項目改用ASP.NET MVC框架來開發(fā),不但運作得十分順暢,而且也能讓完全不懂ASP.NET MVC的新手迅速理解核心觀念與開發(fā)架構,相信只要讀者擁有正確的觀念、學習關鍵的核心技術,很快就能活用在工作與項目上。
本書主要分成三大部分,將以循序漸進的方式,帶領讀者揭開ASP.NET MVC 4的神秘面紗,引導讀者創(chuàng)建正確的觀念,以及實際體驗ASP.NET MVC 4的強大魅力。
TIPS建議章節(jié)閱讀順序:
1 → 2 → 3想按部就班學習ASP.NET MVC的人
1 → 3 → 2想先感受程序,再創(chuàng)建觀念的人
3 → 1 → 2給懶得閱讀文字,只想看程序代碼的人
第1篇:基礎觀念篇
第1章:在學習ASP.NET MVC之前
本章將介紹ASP.NET MVC的基礎知識,幫助你了解ASP.NET MVC的輪廓。由于著重于觀念,如果覺得看不懂,可先直接跳過,待后續(xù)的章節(jié)讀完之后,再回頭閱讀或許更能幫助你創(chuàng)建正確的觀念。
第2章:創(chuàng)建正確的開發(fā)觀念
主要介紹使用ASP.NET MVC進行網(wǎng)站開發(fā)時應有的正確觀念。強大的工具若沒有正確的觀念支持,就像是給你一臺馬力強又省油的手排車,而你不知道離合器如何使用是一樣的,也許你試了一段時間后,覺得車子還是開不快時,就提前放棄了一部好車。本章最后也整理了初學者對ASP.NET MVC經(jīng)常會問的問題,并逐一進行回答。
第3章:新手上路初體驗
將介紹Visual Studio 2012開發(fā)環(huán)境與操作技巧,并利用Visual Studio 2012創(chuàng)建你的第一個ASP.NET MVC專案,讓讀者親身體驗ASP.NET MVC在進行實務開發(fā)時的完整過程,相信在逐步教學的帶領之下能讓現(xiàn)有的ASP.NET Web Form開發(fā)人員迅速了解與ASP.NET MVC的開發(fā)差異,進而快速上手。
第2篇:技術講解篇
第4章:Routing與ASP.NET MVC生命周期
要想掌握ASP.NET MVC,最重要的是要了解網(wǎng)址路由(Routing)與運行生命周期的重要觀念。網(wǎng)址路由在ASP.NET MVC有兩個目的,第一個是比對通過瀏覽器傳來的HTTP要求,并映射到適當?shù)腃ontroller與Action進行處理;另一個目的則是決定ASP.NET MVC應該輸出什么樣的網(wǎng)址響應給瀏覽器。雖然跳過本章仍然可以成功創(chuàng)建ASP.NET MVC網(wǎng)站,但了解它能幫助我們理解ASP.NET MVC運行時的先后順序,進而減少犯錯的機會。
第5章:Model相關技術
在ASP.NET MVC開發(fā)的過程中,通常Model(模型)是整個項目首要開發(fā)的部分,所有需要數(shù)據(jù)訪問的地方都需仰賴Model提供服務。本章將從最基本的ORM觀念講起,介紹Visual Studio 2012內(nèi)建的SQL Server 2012 Express LocalDB數(shù)據(jù)庫,以及學習如何使用Entity Framework Code First快速創(chuàng)建數(shù)據(jù)模型,并利用Code First數(shù)據(jù)庫遷移功能簡化數(shù)據(jù)庫操作的復雜度。最后還會介紹如何手動創(chuàng)建檢視數(shù)據(jù)模型(ViewModel),并通過部分類別的擴充達到基本的字段驗證。
第6章:剖析Controller相關技術
ASP.NET MVC的核心就是Controller (控制器),負責處理瀏覽器傳來的所有要求,并決定響應的屬性,但Controller并不負責應如何顯示屬性,僅響應特定形態(tài)的屬性給ASP.NET MVC框架,而View才是決定響應屬性的重要角色。本章也將會應用第2章所提及的“關注點分離”、“以習慣替換配置”、“不要重復你自己”等觀念,讓你邁入ASP.NET MVC的殿堂,從而發(fā)現(xiàn)ASP.NET MVC的核心之美。
第7章:View數(shù)據(jù)呈現(xiàn)相關技術
View負責數(shù)據(jù)的呈現(xiàn),所有呈現(xiàn)數(shù)據(jù)的邏輯都會由View來控制管理,不過,View開發(fā)應該是整個ASP.NET MVC項目最費時間的,因為與顯示邏輯相關的技術五花八門,本章將會介紹眾多ASP.NET MVC內(nèi)建的View開發(fā)技術,以迅速解決各種復雜的開發(fā)情境。此外,從ASP.NET MVC 3開始新增的Razor語法,是一種有別于常規(guī)ASP.NET Web Form的全新撰寫風格,在本章也會詳加闡述所有細節(jié),讓讀者在最短的時間內(nèi)學會這個嶄新、優(yōu)異的Razor語法。
第8章:Area區(qū)域相關技術
本章將介紹如何利用ASP.NET MVC的Area(區(qū)域)機制,協(xié)助你架構較為大型的項目,讓獨立性高的功能獨立成一個ASP.NET MVC子網(wǎng)站,以降低網(wǎng)站與網(wǎng)站之間的耦合性,也可以通過Area的切割讓多人同時開發(fā)同一個項目時,減少互相沖突的機會。
第3篇:開發(fā)實戰(zhàn)篇
第9章:高級實戰(zhàn):電子商務網(wǎng)站開發(fā)
本章將通過第2篇所學到的知識,以一套完整的電子商務網(wǎng)站為藍圖,詳述ASP.NET MVC 4開發(fā)流程與分享許多實務開發(fā)技巧,從數(shù)據(jù)模型規(guī)劃、控制器架構規(guī)劃、創(chuàng)建檢視頁面、添加數(shù)據(jù)庫功能與購物車功能,最后再介紹如何強化現(xiàn)有ASP.NET MVC項目與信息分頁技巧,相信在融會貫通之后,即可有效運用于其他更復雜的項目上。
第10章:ASP.NET MVC開發(fā)技巧
本章將整理一些在實務上經(jīng)常使用的開發(fā)技巧。包括強化網(wǎng)站安全性、多國語言支持、使用Visual Studio程序代碼模板快速開發(fā)、如何在ASP.NET MVC與ASP.NET Web Form之間傳遞數(shù)據(jù)、如何對ASP.NET MVC 4源代碼進行調(diào)試、使用Visual Studio程序代碼模板快速開發(fā)等。雖然善用工具能有效提升開發(fā)效率,但還是要記得,擁有正確的觀念與扎實的技術,才是開發(fā)效率提升的不二法門。
第11章:安裝部署
部署網(wǎng)站往往是一件麻煩事,因為在安裝部署的過程中,經(jīng)常有許多步驟要運行,對于許多不太熟悉IIS/SQL的新手來說,部署網(wǎng)站變成一件非常困難且危險的事。Visual Studio 2012在ASP.NET網(wǎng)站部署方面提升了不少能力,有助于讓你將現(xiàn)有網(wǎng)站快速且簡便地發(fā)布到遠程的IIS服務器上,而免除了許多繁雜的設置程序。此外還整理了幾個部署ASP.NET MVC的常見問題,當遇到問題時可供讀者進行參考。
黃保翕(Will保哥)
網(wǎng)絡知名技術專家(個人博客TheWill Will Web記載著Will在網(wǎng)絡世界的學習心得與技術分享)。當前已經(jīng)超過千篇文章。
臺科大電子工程系畢業(yè),現(xiàn)任多奇數(shù)位創(chuàng)意有限公司技術總監(jiān),自身專攻Web開發(fā)已經(jīng)超過15年,早期專研LAMP相關技術,近幾年全心轉(zhuǎn)移技術領域至Microsoft.NET Platform與ASP.NET開發(fā)技術。曾擔任 Visual Studio2010 上市發(fā)表會講師、MSDN講座講師、TechDays Taiwan 2010/2011 講師、TechEd China2011 講師,出版著作有《ASP.NETMVC 2 開發(fā)實戰(zhàn)》與《WindowsPhone開發(fā)實戰(zhàn)》等。
擅長各式Web排查方案、中大型網(wǎng)站架構規(guī)劃、數(shù)據(jù)庫系統(tǒng)設計、網(wǎng)站屬性管理系統(tǒng)、網(wǎng)絡系統(tǒng)與Web集成。
微軟最有價值專家(MVP),擁有MCTS、MCPD等國際認證。
黃保翕(Will保哥)
網(wǎng)絡知名技術專家(個人博客TheWill Will Web記載著Will在網(wǎng)絡世界的學習心得與技術分享)。當前已經(jīng)超過千篇文章。
臺科大電子工程系畢業(yè),現(xiàn)任多奇數(shù)位創(chuàng)意有限公司技術總監(jiān),自身專攻Web開發(fā)已經(jīng)超過15年,早期專研LAMP相關技術,近幾年全心轉(zhuǎn)移技術領域至Microsoft.NET Platform與ASP.NET開發(fā)技術。曾擔任 Visual Studio2010 上市發(fā)表會講師、MSDN講座講師、TechDays Taiwan 2010/2011 講師、TechEd China2011 講師,出版著作有《ASP.NETMVC 2 開發(fā)實戰(zhàn)》與《WindowsPhone開發(fā)實戰(zhàn)》等。
擅長各式Web排查方案、中大型網(wǎng)站架構規(guī)劃、數(shù)據(jù)庫系統(tǒng)設計、網(wǎng)站屬性管理系統(tǒng)、網(wǎng)絡系統(tǒng)與Web集成。
微軟最有價值專家(MVP),擁有MCTS、MCPD等國際認證。
第1章 在學習ASP.NETMVC之前
1.1 何謂MVC
1.1.1 何謂Model
1.1.2 何謂View
1.1.3 何謂Controller
1.2 初探MVC架構
1.2.1 彼此的關聯(lián)性
1.2.2 Controller與View的關聯(lián)性
1.2.3 View與Model的關聯(lián)性
1.2.4 Model與Controller的關聯(lián)性
1.3 彼此的獨立性
1.3.1 Controller與View之間的獨立性
1.3.2 View與Model之間的獨立性
1.3.3 Model與Controller之間的獨立性
1.4 為什么要ASP.NET MVC
第1章 在學習ASP.NETMVC之前
1.1 何謂MVC
1.1.1 何謂Model
1.1.2 何謂View
1.1.3 何謂Controller
1.2 初探MVC架構
1.2.1 彼此的關聯(lián)性
1.2.2 Controller與View的關聯(lián)性
1.2.3 View與Model的關聯(lián)性
1.2.4 Model與Controller的關聯(lián)性
1.3 彼此的獨立性
1.3.1 Controller與View之間的獨立性
1.3.2 View與Model之間的獨立性
1.3.3 Model與Controller之間的獨立性
1.4 為什么要ASP.NET MVC
1.4.1 關注點分離與可維護性
1.4.2 開放特性與社群支持
1.4.3 開發(fā)工具與效率
1.4.4 易于測試的架構
1.4.5 易于分工的架構
1.5 總結
第2章 創(chuàng)建正確的開發(fā)觀念
2.1 關注點分離
2.2 以習慣替換配置
2.2.1 Controller
2.2.2 View
2.2.3 Model
2.3 開發(fā)ASP.NET MVC項目時的建議
2.4 ASP.NET MVC常見問題
2.5 總結
第3章 新手上路初體驗
3.1 認識Visual Studio
開發(fā)工具
3.2 介紹Nu Get套件管理員
3.2.1 遭遇問題
3.2.2 使用方法
3.2.3 開啟程序包管理器控制臺(Package Manager Console)
3.2.4 啟用Nu Get套件還原
3.3 創(chuàng)建第一個ASP.NET MVC專案
3.3.1 利用ASP.NET MVC項目模板創(chuàng)建項目
3.3.2 創(chuàng)建數(shù)據(jù)模型
3.3.3 創(chuàng)建控制器、動作與檢視
3.3.4 測試當前創(chuàng)建好的留言板網(wǎng)頁
3.3.5 查看數(shù)據(jù)庫屬性
3.3.6 了解自動生成的程序代碼
3.3.7 調(diào)整前臺讓用戶留言的版面
3.4 學習MVC的注意事項
3.4.1 了解不同的項目類型
3.4.2 初學者常犯的錯誤
3.4.3 小心使用Request與Response對象
3.4.4 不要在檢視中撰寫過多的程序邏輯
3.5 總結
第2篇 技術講解篇
第4章 Routing與ASP.NET MVC
生命周期
4.1 Routing——網(wǎng)址路由
4.1.1 比對通過瀏覽器傳來的HTTP要求
4.1.2 響應適當?shù)木W(wǎng)址給瀏覽器
4.1.3 默認網(wǎng)址路由屬性解說
4.2 HTTP要求的URL如何對應網(wǎng)址路由
4.2.1 網(wǎng)址路由演示
4.2.2 替網(wǎng)址路由加上路由值的條件約束
4.3 網(wǎng)址路由如何在ASP.NET MVC中生成網(wǎng)址
4.4 ASP.NETMVC的運行生命周期
4.4.1 網(wǎng)址路由比對
4.4.2 運行Controller與Action
4.4.3 運行View并回傳結果
4.5 總結
第5章 Model相關技術
5.1 關于Model的責任
5.2 開發(fā)Model的基本觀念
5.2.1 何謂ORM
5.2.2 數(shù)據(jù)庫開發(fā)模式
5.3 Local DB介紹
5.3.1 Local DB的運作方式
5.3.2 如何連接Local DB實例
5.3.3 管理Local DB自動實例
5.3.4 管理Local DB具名實例
5.4 使用Code First創(chuàng)建數(shù)據(jù)模型
5.4.1 創(chuàng)建數(shù)據(jù)模型
5.4.2 創(chuàng)建數(shù)據(jù)上下文類
5.4.3 設計模型之間的關聯(lián)性
5.4.4 啟用延遲裝入特性
5.5 使用Code First數(shù)據(jù)庫遷移
5.5.1 EF Code First如何記錄版本
5.5.2 啟用數(shù)據(jù)庫遷移
5.5.3 運行數(shù)據(jù)庫遷移
5.5.4 自定義數(shù)據(jù)庫遷移規(guī)則
5.5.5 自動數(shù)據(jù)庫遷移
5.5.6 如何避免數(shù)據(jù)庫被自動創(chuàng)建或自動遷移
5.6 使用View Model數(shù)據(jù)檢視模型
5.7 擴充數(shù)據(jù)模型
5.7.1 定義數(shù)據(jù)模型的Metadata
5.7.2 自定義Metadata驗證屬性
5.7.3 ASP.NET MVC3新增的驗證屬性
5.7.4 Entity Framework新增的驗證屬性
5.7.5 .NET4.5新增的驗證屬性
5.8 總結
第6章 Controller相關技術
6.1 關于Controller的責任
6.2 Controller的類別與方法
6.3 Controller的運行過程
6.3.1 找不到Action時的處理方式
6.3.2 動作名稱選定器
6.4 動作方法選定器
6.4.1 Non Action屬性
6.4.2 HTTP動詞限定屬性
6.5 Action Result解說
6.5.1 View Result
6.5.2 Partial View Result
6.5.3 Empty Result
6.5.4 Content Result
6.5.5 File Result
6.5.6 JavaScript Result
6.5.7 Json Result
6.5.8 Redirect Result
6.5.9 Redirect To Route
6.5.10 Http Status Code Result
6.5.11 Http Not Found Result
6.5.12 Http Unauthorized Result
6.6 View Data、View Bag與Temp Data概述
6.6.1 View Data
6.6.2 View Data. Model
6.6.3 View Bag
6.6.4 Temp Data
6.7 模型綁定
6.7.1 簡單模型綁定
6.7.2 使用Form Collection取得窗體信息
6.7.3 復雜模型綁定
6.7.4 多個復雜模型綁定
6.7.5 判斷模型綁定的驗證結果
6.7.6 模型綁定驗證失敗的錯誤詳細信息
6.7.7 清空模型綁定狀態(tài)
6.7.8 使用Bind屬性限制可被更新的數(shù)據(jù)模型屬性
6.7.9 使用Update Model與Try Update Model
6.8 動作過濾器
6.8.1 授權過濾器屬性
6.8.2 動作過濾器屬性
6.8.3 結果過濾器屬性
6.8.4 例外過濾器屬性
6.8.5 自定義動作過濾器屬性
6.9 總結
第7章 View數(shù)據(jù)呈現(xiàn)相關技術
7.1 關于View的責任
7.2 了解Razor語法
7.2.1 Razor基本語法
7.2.2 Razor與HTML混合輸出
7.2.3 Razor與HTML混合輸出陷阱與技巧
7.2.4 Razor與ASPX語法比較
7.2.5 Razor的主版頁面框架
7.2.6 @helper輔助方法
7.2.7 @functions自定義函數(shù)
7.2.8 @model引用參考資料型別
7.2.9 @using引用命名空間
7.3 View如何從Action取得數(shù)據(jù)
7.3.1 使用弱型別模型取得數(shù)據(jù)
7.3.2 使用強型別模型取得數(shù)據(jù)
7.4 HTML輔助方法
7.4.1 使用HTML輔助方法輸出超鏈接