WebForms And MVC

2022-12-07

根據 Rebuilding Web Forms Applications in MVC 課程心得,筆記 ASP.NET Web Forms 與 MVC 的殊異之處。

logo

說明

LifeCycle

ASP.NET Web Forms 以及 ASP.NET MVC 有著相同的基底平台也就是 ASP.NET,在 ASP.NET 的 Request 生命週期上,Web Forms 與 MVC 最直接的差別在於負責的 HTTP Handler 不同。在 ASP.NET MVC 中只有單一個 Handler,並且根據生命週期先前的路由判斷,由產生的 Controller 進行 Request 處理;而 Web Forms 每一支 .aspx 程式都是一個獨立的 Handler 用於處理 Request。

ASP.NET 的 Application Life Cycle:

  • BeginRequest
  • AuthenticateRequest
  • AuthorizeRequest
  • ResolveRequestCache (URL Routing)
  • MapRequestHandler
  • AcquireRequestState
  • RequestHandlerExecute (MVC or Web Forms)
  • UpdateRequestCache
  • LogRequest
  • EndRequest

而在 RequestHandlerExecute 階段,Web Forms ViewState 以及 Validation 的機制發生於此,並且有自己的 Page Life Cycle:

Inti
初始化控制項的程式碼
Load
處理控制項相關的邏輯與資料,包含 ViewState 以及表單資料等
Validate
進行頁面層級的檢查控制項
Control Events
處理 Event Handler 例如按鈕等
Render
渲染與生成 HTML

ASP.NET MVC 也有自己的 Request Life Cycle:

Controller Initialization
根據先前在 Application Life Cycle ResolveRequestCache 階段所解析的路由資訊,決定 Controller
Action Method Execution
產生回應的資料與資料格式
Action Result Execution
將資料寫入 Response Stream
View Engine
對於 HTML 回應類型的資料,進行渲染

Layout & View

Web Forms 在處理頁面的渲染上,包含使用 Master Page 作為網頁的 Layout 檔,可以用於重複使用的 Scripts / Style 參考處理,而可重複使用的元件部分,則以副檔名 .ascx 抽出並使用。另外最重要的是 Web Forms 元件稱為控制項 (Controls),搭配 Web Forms 的 ViewState 機制進行資料的邏輯處理與呈現。

相同於 Web Forms,MVC 有對應的 Layout, View (.cshtml) 以及 PartialView (.cshtml),需要插入的內容可以在 Layout 中挖 Section 讓 View 去填補。

相對於 Web Forms 元件的控制項,MVC 使用原生的 HTML,搭配 Property 以及 CSS 進行網頁呈現與互動,並且提供豐富的 HTML Helper 協助產生 HTML。

而最重要的是 Razor 引擎讓頁面的渲染更為方便與直觀,不同於 Web Forms 使用的 Code-Behind 將頁面與程式碼分隔成 .aspx 以及 .aspx.cs。