SlideShare a Scribd company logo
Introduce twMVC
Who We Are and What We Want
 我們熱愛 Web 開發技術,並樂於分享 ASP.NET MVC 開發心得
 已成功建立數個灘頭堡的經驗,深知 MVC 開發模式條理分明,有
利於分工與管理,想推薦給尚未了解的開發人員
 不願意看到 MVC 叫好不叫座,我們樂意透過經驗交換來破除導入
障礙
2
為何組成 twMVC
 A quite simple http://mvc.tw/
 But, it’s still under-construction now 
3
twMVC 資訊分享
 每週小型聚會,不特定主題
 固定於每週四 19:30-21:30,不改時間,逢國定假日暫停一次
 議程不會提前排定,以當天參加者最近的心得分享為主
 舉辦不定期研討會
4
twMVC 做哪些事推廣 ASP.NET MVC 技術
 預先設定主題的中大型會議,主題提前於 mvc.tw 上公告
 原則上一個月排定一次,初期因場地關係設定報名人數上限
為 30 人
5
twMVC 不定期研討會
ASP.NET MVC網站的從無到有
從頭到尾完成一個MVC專案
 建立ASP.NET MVC專案
 使用Razor與Entity Framework完成Model、View、
Controller
 邊做邊學ASP.NET MVC的特色
主題
7
 把應用程式架構給切分為三個部分,分別為:
 Model(模型)
 View(視圖)
 Controller(控制器)
 MVC的三個組成部分所負責的功能不同,相互獨立
 MVC並不等於三層式架構
8
複習一下 什麼是 MVC
 IDE
 Visual Web Developer 2010 Express (Free)
 Visual Studio 2010 (本次使用)
 Visual Studio 2012 RC
 Visual Studio 開發套件
 ASP.NET MVC 3 (本次使用)
 ASP.NET MVC 4 RC
 組件(佈署的主機上要安裝)
 ASP.NET MVC 3 (本次使用)
首先-開發環境的準備
9
 建立ASP.NET MVC 3 Web Application
 使用免費版型
專案的建立與套版
10
1. 建立AspNetMvc.StartFromScratch專案
2. 複製檔案到Content中
11
實際操作 1 開始MVC專案
 App_Data
 內部使用的資料(無法使用URL存取)
 Content
 靜態檔案(CSS、Images)
 Controllers
 Models
 Scripts
 JavaScript
 Views(無法使用URL存取)
12
認識ASP.NET MVC習慣的目錄結構
1. 建立_LayoutBase.cshtml
2. 建立_LayoutMain.cshtml並套用_LayoutBase.cshtml
3. 使用UrlHelper更換Url
4. 建立HomeController
5. 建立Home/Index.cshtml並套用_LayoutMain.cshtml
6. 測試
13
實際操作 2 建立Layout與套用
 Layout與Partial主要是將每頁複雜的項目簡化,且都可以重覆使用。
 Layout又稱母頁或主頁,
 使View可以套用共同的設計,但一個View只套用一個Layout,但Layout
可以有父Layout(巢狀Layout)。
 Partial
 是將View切成一個一個小部分,每個View可以載入任意的Partial。
 延伸學習
 ASP.NET MVC 3: Layouts and Sections with Razor
建立Layout與Partial頁
14
以 @ 開始
 @ = <% Response.Write(Html.Encode( code )) %>
 @() 同 @ 但可以寫比較複雜一點的Code(有空白,有運算式)
 如@(A==ture ? “Yes” : “No”)
 @{} 程式碼區塊
 @: 在 @{ @:直接輸出文字 }
 @* *@ 註解
 延伸學習
 ASP.NET MVC3 Razor 初心者容易遇到的問題
15
Razor語法
 @model
 @section
 @helper
 延伸學習
 ASP.NET MVC 3: New @model keyword in Razor
 ASP.NET MVC 3 and the @helper syntax within Razor
16
Razor Keyword
 @RenderBody 呈現子View的主體
 @RenderSection 呈現子View @section{ }內容
 @RenderPage 呈現檔案內容
 @Write
 延伸學習
 ASP.NET MVC 3 Razor Syntax - RenderBody, RenderPage and
RenderSection
17
Razor Method
 使用Url.Content或Url.Action產生Url的優缺點
 優點
 以應用程式的根為起始點,不會因為部署的環境,而產生路徑問題
 http://appdomain1/ < 原本部署
 http://appdomain2/myAPP/ < 改成這裡沒處理好會有路徑問題
 根據Route產生Url
 缺點
 會花一點效能
UrlHelper
18
 ViewData與ViewBag資料的存放是同一個,但呼叫方式不同
 ViewData[“Key”]
 ViewBag.Key
 生命週期為一個Action
 TempData如同TempData,但生命週期會一個Request
 如果一個Request會有很多RenderAction請使用TempData。
19
ViewData ViewBag TempData
1. 建立Entity Framework 4.0 DemoModel.edmx檔案
2. 從資料庫產生Entity
3. 建立BlogController
4. 建立Part Action
5. 使用Linq取得5筆Blog資料
6. 建立與完成Blog/Part.cshtml
7. 修改Home/Index.cshtml
8. 測試
20
實際操作 3 資料的讀取
 依功能別建立Controller
 如:
 HomeController
 BlogController
 NewsController
 AccountController
(P.S.建議不要全部都寫在HomeController中)
21
建立Controller
 什麼是ORM
物件關聯對應(Object Relational Mapping,簡稱ORM,
或O/RM,或O/R mapping),是一種程式設計技術,用於實
現物件導向編程對不同類型系統的數據之間的轉換。
22
建立Model-使用 ORM
Mapping
 在N-Tire構架中,撰寫商業邏輯層的人,可以專注在處理流程,不
需要分心去思考如何存取Database。
 可以快取切換Database。
 雖然正式環境很改變Database,但測試時很方便,如單元測試時使用
SQLite。
 開發速度快
 有強大Visual Studio IntelliSense與LINQ支援
 而且看Entity比看Table來的輕鬆
 重覆使用
 擴充性高
23
ORM有什麼好處
24
使用VS的EF工具產生Entity
 建立Blog/Hot.cshtml
使用LazyLoad取得CreateUser資料,發生
ObjectContext 執行個體已被處置,無法再使用於需要連接的作
業。
1. 在Global.asax.cs中增加CurrentEntities
2. 修改BlogController
3. 測試
25
實際操作 4-1 LazyLoad
 每一個EF的Entities都有Context(上下文),處理Entity
的狀態,用來管理物件是否有修改過、LazyLoad使用的
Connection,與物件的快取等等。
 如果網站只使用同一個Context,很容易因為多執行緒造成
衝突,常見的作法是一個Request使用一個EF Context。
26
ORM的Context處理 For EF
 Lazy-Load是ORM中很重要的特色,會在使用關連時自動查
尋與載入關連資料,如:
Blog blog = entities.Blogs.First(x=>id==id);
string name = blog.Comments[0].CreateUser.Name;
請問上二行程式自動下了幾次SQL
27
什麼Lazy-Load
 總共 : 3 次 你猜對了嗎
 Lazy-Load自動化下Sql的時機是在Property的第一次使用
的資料,Lazy-Load在完全不需要任何處理就可以取得關連
表的資料是不是很方便。
 但Lazy-Load也有不適用的地方,如上一張投影片的程式如
在for(n<1000)的迴圈中,每個迴圈3個Sql,總共會下
3000次,效能會非常差,這時還是用Join只下一次Sql會比
較好。
28
什麼Lazy-Load(2)
 Entity Framework 概觀 – MSDN
 Entity Framework 快速上手&學習資源整理 - The Will
Will Web
 LINQ 的簡介 – MSDN
 101 LINQ Samples C#- MSDN
29
LINQ與ORM的延伸學習
1. 使用Linq Count資料
@this.Model.Comments.Count
但發現效能不好,請問為什麼效能不好??
2. 重寫Count計算
3. 發現要寫好長的Namespace,增加預設Namespace
30
實際操作 4-2 Count資料
 ORM很方便,可以 . 阿 .想要的資料就出來的,比寫Sql
Join來Join去或要寫一堆的Sql才能取得資料方便太多了,
但要小心,每一個 . 可能就會下載海量資料回來。
如:
Blog.Comments.Count,為什麼要將所有的Comment下載回
來後才Count,為什麼不在資料庫端Count,只要下載一個
int就可以了。
31
ORM 是雙面刅 很方便但要小心
MVC有至少有二個Web.Config
 根目錄下的Web.Config
 給應用程式使用
 Views下的Web.Config(Area也會有一個)
 View的編譯設定
 Request Block
 廷伸學習
ASP.NET MVC 3 使用 Razor 如何在 Web.config 宣告預設的
Namespaces
32
MVC專案的Web.Config為什麼有多個??
1. 資料NuGet下載 jQuery
2. 新增BlogComments的Comments與AddComment的Action
與View
3. 新增Demo.js
4. 使用 .Load() AJAX下載資料
5. 測試
33
實際操作 5-1 AJAX下載BlogComment
 NuGet是專案的套件管理,安裝簡單、自動判斷更新、刪除也不複
雜。
 常見的jQuery、Fancybox、Elmah、NHibernate、Spring.Net都可
以一鍵安裝,非常的方便。
 因為是專門給Visual Studio用的會使用微軟習慣,如:
 安裝js會將檔案放在/Scripts/,圖檔會放在/Content/下
 Dll會自動加入參考
 有設定檔會自動設定(如Elmah會修改Web.Config)
 延伸學習
 還在揮汗徒手安裝程式庫? 試試NuGet吧 - 黑暗執行緒
34
使用NuGet
 最熱門的JavaScript函式庫
 跨瀏覽器的DOM元素選擇
 DOM巡訪與更改
 事件(Events)
 CSS操作
 特效和動畫(移動顯示位置、淡入、淡出)
 Ajax
 延伸性(Extensibility)
 JavaScript外掛程式 等等等
 廷伸學習
jQuery - 维基百科
35
什麼是jQuery
 因為現在現在網站沒有Ajax的很少,不可避免會在js檔中寫下後端的路
徑,建議不要寫絶對路徑,以免更換部署方式,讓AJAX全死。
 在Element上設定路徑
 在_Layout.cshtml中偷偷設定
36
JavaScript路徑處理
1. 在_LayoutMain.cshtml中設定應用程式路徑
這裡使用藏在Script中的方式
2. 更換部署方式
3. 測試AJAX是否正常
37
實際操作 5-2
 RenderPartial 與 RenderAction 的差異?
38
RenderPartial & RenderAction
Controller
View
Partial Partial Partial
RenderPartial
Controller
View
Render
Action
RenderAction
Render
Action
Render
Action
Controller
View
1. 增加BlogComment的Metadata
2. 增加所需的js檔
3. 因為是AJAX下載資料,要重新綁定事件
4. 執行
39
實際操作 6-1 Validation
 使用System.ComponentModel.DataAnnotations可以輕鬆的做到前後
端的驗證。
 整合jQuery.validate,擴充性不會太複雜
 常見的Validation有
 Required、StringLength、RegularExpression、Range、Compare
 延伸學習:
 ASP.NET MVC3 如何使用內建驗證功能達到前端與後端的同時驗證 -
demo小鋪
40
Validation
 會將Post或Get的值轉換 物件 與 使用HtmlHelper或AjaxHepler可以
物件 轉換成 HTML元素。
 同時會整個前後端Validation。
 同時也會保存Post資料,可以還原輸入失敗的值。
 延伸學習:
 ASP.NET MVC Model Binding - Part1 – CodeProject
 ASP.NET MVC Model Binding - Part2 - CodeProject
41
ModelBinding
 HtmlHelper與AjaxHelper,都是用來快速產生HTML的類別,
同時整合ModelBinding與Validation,這些特色使
ASP.NET MVC在資料的CRUD上,非常的輕鬆。
 延伸學習:
 ASP.NET MVC HTML Helpers - w3schools
42
HtmlHelper與AjaxHelper
1. 修改AddComment.cshtml,改用AjaxHelper
2. 增加Ajax OnComplete處理,重算Comment Count
3. 在Demo.js增加addCommentComplated function使用
jQuery來計算Count。
43
實際操作 6-2 AJAX POST
 因為套用Route後Id不會在QueryString中,而是路徑,不
能用Request[“Id”]取資料,需要改從RouteData中取資料。
44
RouteData
1. 建立LoginViewModel.cs
2. 建立AccountController
3. 建立Shared/_LogOnPartial.cshtml判斷是否登入
4. 建立Account/Login.cshtml
5. 修改Web.Config套用表單驗證
45
實際操作 7
 ViewModel通常是為與View溝通用的,通常一個View不會
剛好使用一個Table資料,或是剛好的欄位(如多處理分頁或
排序用的欄位)
46
ViewModel
 表單驗證(FormsAuthentication),ASP.NET 2.0之後內建的身
份驗證模組,通過驗證後會用加密過的Cookie來身份。
 整合HttpContent.Current.User。
 可以使用web.conifg的authorization區段或
AuthorizeAttribute做權限控制。
 延伸學習
 概略解釋Forms Authentication的運作-The Will Will Web
47
表單驗證與授權
 Layout(母頁),不是寫死在View最開頭後就不能再改的,
是可以更動的。
 MVC ViewEngine是先執行子頁,再依子頁中母頁設定,執
行母頁,再將RenderBoay的地方換成子頁的內容,所以在
子頁前都有機會更換Layout。
48
更換Layout
 View有一套預設的搜尋機制,使用相對路徑會,
 先找自己同一層資料夾下的
 然後在找Shared資料夾
 絶對路徑使用”~/Views/”開頭。
 使用絶對路徑要加上副檔名,不會自動判斷。
49
VirtualPathFactory View的搜尋
1. 建立Blog Add的Action
2. 撰寫EF Create的Code
3. 使用Create的Template建立View
4. 瀏覽時Update( Hit+1 )
5. 執行
50
實際操作 8 CRUD
1. Global.asax.cs在增加MapRoute
2. 測試
51
實際操作 9 自訂Route
1. 設定Web.Release.Config
2. 在專案上按右鍵發行
3. 在IIS中建立新站台
52
實際操作 10 部署
 千萬千萬不用複製原始檔的方式佈署,請使用Visual Studio的發行功能。
 IIS 6要設定 ISAPI
 需要安裝 ASP.NET MVC 3組件
 延伸學習:
 Razor Views 預編譯(Pre-Compile)-黃偉榮的學習筆記
 ASP.NET MVC 3網站BIN目錄手動部署-黑暗執行緒
 Web.config Minification 與 Transformation-小朱®的技術隨手寫
 Visual Studio 2010 單鍵發行簡單使用 Web.Release.config - demo小鋪
部署
53
 請來賓們回家完成News部份的操作
54
課後作業
The End
謝謝各位

More Related Content

What's hot (20)

PDF
twMVC#42 Windows容器導入由0到1
twMVC
 
PDF
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC
 
PDF
twMVC#43 YARP
twMVC
 
PDF
twMVC#33玩轉 Azure 彈性部署
twMVC
 
PDF
twMVC#21 | 你所不知道的 Visual Studio
twMVC
 
PDF
twMVC#29 -Learning Machine Learning with Movie Recommendation
Mia Chang
 
PDF
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC
 
PDF
twMVC#36讓 Exceptionless 存管你的 Log
twMVC
 
PDF
twMVC#42 Azure IoT Hub for Smart Factory
twMVC
 
PDF
twMVC#19 | opserver監控服務的解決
twMVC
 
PDF
北護樂學程式冬令營 2017
Hamilton Wong
 
PDF
輕鬆上手Asp.net web api 2.1-twMVC#14
twMVC
 
PDF
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC
 
PDF
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
twMVC
 
PDF
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC
 
PDF
twMVC#23 | 快速上手 Azure Functions
twMVC
 
PDF
Node.js從無到有 基本課程
Simon Su
 
PDF
Npm 套件管理 & 常用開發工具介紹
wantingj
 
PDF
Node.js X Windows Azure
Caesar Chi
 
PDF
twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC
 
twMVC#42 Windows容器導入由0到1
twMVC
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC
 
twMVC#43 YARP
twMVC
 
twMVC#33玩轉 Azure 彈性部署
twMVC
 
twMVC#21 | 你所不知道的 Visual Studio
twMVC
 
twMVC#29 -Learning Machine Learning with Movie Recommendation
Mia Chang
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC
 
twMVC#19 | opserver監控服務的解決
twMVC
 
北護樂學程式冬令營 2017
Hamilton Wong
 
輕鬆上手Asp.net web api 2.1-twMVC#14
twMVC
 
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC
 
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
twMVC
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC
 
twMVC#23 | 快速上手 Azure Functions
twMVC
 
Node.js從無到有 基本課程
Simon Su
 
Npm 套件管理 & 常用開發工具介紹
wantingj
 
Node.js X Windows Azure
Caesar Chi
 
twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC
 

Similar to Asp.net mvc 從無到有 -twMVC#2 (20)

PDF
Asp.net mvc網站的從無到有
Wade Huang
 
PPTX
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
 
PDF
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
twMVC
 
PPTX
Asp.net mvc 概觀介紹
Alan Tsai
 
PPTX
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
 
PPTX
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
Duran Hsieh
 
PPTX
Asp.net mvc 基礎
Gelis Wu
 
PDF
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC
 
PPTX
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
Duran Hsieh
 
PDF
ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰 -twMVC#3
twMVC
 
PDF
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
twMVC
 
PPTX
Introduction to ASP.NET MVC and MVC 5 Features
Jeff Chu
 
PDF
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC
 
PPTX
一個微信專案從0到000的效能調教
Bruce Chen
 
PDF
20130823微軟雲端平台開發者日
twMVC
 
PPTX
ASP.NET MVC 5線上課程(入門前三天)
MIS2000 Lab.
 
PDF
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
twMVC
 
PDF
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC
 
PPSX
利用 ASP.NET MVC 提升您的 Web 應用程式
Chui-Wen Chiu
 
PDF
ASP.NET MVC 開發分享
Eric Ping
 
Asp.net mvc網站的從無到有
Wade Huang
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
 
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
twMVC
 
Asp.net mvc 概觀介紹
Alan Tsai
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
Duran Hsieh
 
Asp.net mvc 基礎
Gelis Wu
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
Duran Hsieh
 
ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰 -twMVC#3
twMVC
 
twMVC#03 | ASP.NET MVC 新增、查詢、修改、刪除 基本功實戰
twMVC
 
Introduction to ASP.NET MVC and MVC 5 Features
Jeff Chu
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC
 
一個微信專案從0到000的效能調教
Bruce Chen
 
20130823微軟雲端平台開發者日
twMVC
 
ASP.NET MVC 5線上課程(入門前三天)
MIS2000 Lab.
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
twMVC
 
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC
 
利用 ASP.NET MVC 提升您的 Web 應用程式
Chui-Wen Chiu
 
ASP.NET MVC 開發分享
Eric Ping
 
Ad

More from twMVC (20)

PDF
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
twMVC
 
PDF
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
twMVC
 
PDF
讓應用程式雲端化 由 Iaa s 邁向 paas 之路-Global Azure Bootcamp 2015 臺北場
twMVC
 
PDF
線上遊戲利用 Dev ops 開源工具 chef, docker, vagrant 在microsoft azure 的佈署實踐-Global Azure...
twMVC
 
PDF
Azure mobileservice
twMVC
 
PDF
一小時可以打造什麼服務Plus twMVC#18
twMVC
 
PDF
專案分層架構 twMVC#18
twMVC
 
PDF
SignalR實戰技巧 twmvc#17
twMVC
 
PDF
Angular js twmvc#17
twMVC
 
PDF
TypeScript-twmvc#16
twMVC
 
PDF
前端工程師與室內裝修師傅的相似之處-twMVC#16
twMVC
 
PDF
開發的效能與效率-twMVC#15
twMVC
 
PDF
動手打造 application framework-twMVC#15
twMVC
 
PDF
樞紐分析表之數據分析與統計-twMV#C14
twMVC
 
PPTX
MVC實戰分享 分頁與排序相關技巧-tw mvc#13
twMVC
 
PPTX
RWD不是你想的那樣 tw mvc#13
twMVC
 
PPTX
ASP.NET MVC 善用網路資源快速完打造網站
twMVC
 
PDF
如何在實務上使用TDD來開發 twmvc#12
twMVC
 
PDF
Vs2013新功能介紹 twMVC#11
twMVC
 
PDF
架構設計入門 twMVC#11
twMVC
 
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
twMVC
 
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
twMVC
 
讓應用程式雲端化 由 Iaa s 邁向 paas 之路-Global Azure Bootcamp 2015 臺北場
twMVC
 
線上遊戲利用 Dev ops 開源工具 chef, docker, vagrant 在microsoft azure 的佈署實踐-Global Azure...
twMVC
 
Azure mobileservice
twMVC
 
一小時可以打造什麼服務Plus twMVC#18
twMVC
 
專案分層架構 twMVC#18
twMVC
 
SignalR實戰技巧 twmvc#17
twMVC
 
Angular js twmvc#17
twMVC
 
TypeScript-twmvc#16
twMVC
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
twMVC
 
開發的效能與效率-twMVC#15
twMVC
 
動手打造 application framework-twMVC#15
twMVC
 
樞紐分析表之數據分析與統計-twMV#C14
twMVC
 
MVC實戰分享 分頁與排序相關技巧-tw mvc#13
twMVC
 
RWD不是你想的那樣 tw mvc#13
twMVC
 
ASP.NET MVC 善用網路資源快速完打造網站
twMVC
 
如何在實務上使用TDD來開發 twmvc#12
twMVC
 
Vs2013新功能介紹 twMVC#11
twMVC
 
架構設計入門 twMVC#11
twMVC
 
Ad

Asp.net mvc 從無到有 -twMVC#2