簡體   English   中英

Asp.net 頁面生命周期和 Asp.net Mvc 頁面生命周期有什么區別?

[英]what is the difference between Asp.net page life cycle and Asp.net Mvc page life cycle?

Asp.net 頁面生命周期和 Asp.net Mvc 頁面生命周期有什么區別?

Asp.net頁面生命周期 簡單記SILVER U
s-開始
I-初始化
L-負載
V-驗證
電子事件處理
R-渲染
U-卸載
Mvc 和 Asp.net 頁面的實際區別是什么?

ASP.NET 頁面生命周期與 webforms 完全不同,沒有像我們在 web 表單中那樣的事件:預渲染oninit等。每當我們請求一個 URL 時,唯一發生的事情是,一個控制器的實例被創建並且調用它的某些操作方法會導致將視圖呈現為 HTML 作為瀏覽器中的響應。

ASP.NET MVC 頁面生命周期:

根據MSDN ,以下是asp.net mvc頁面生命周期涉及的主要步驟:

1) 路由

將 url 路由到其控制器和操作

在 ASP.NET 應用程序中,每個 asp.net 頁面都實現了 IHTTPHandler 接口。

此接口有一個 ProcessRequest() 方法,當您請求頁面時會調用該方法。 ProcessRequest() 方法負責處理請求並生成響應。 所以在 ASP.NET 應用程序中很簡單,您在 url 中請求一個頁面,如http://mysite1\\default.aspx ,然后它在磁盤上搜索該頁面並執行 processrequest 方法並生成響應。

但是在 MVC 應用程序中,它不會以這種方式工作。 特定請求不存在物理頁面。 所有的請求都被路由到一個叫做 Controller 的特殊類。 控制器負責生成響應並將內容發送回瀏覽器。

2)Url Routing Module攔截Request:

每當您針對 ASP.NET MVC 應用程序發出請求時,該請求都會被 UrlRoutingModule HTTP 模塊攔截。

當 UrlRoutingModule 攔截請求時,該模塊所做的第一件事就是將當前的 HttpContext 包裝在一個 HttpContextWrapper 對象中。

HttpContextWrapper 對象派生自 HTTPContextBase 類。

3)MVC 處理程序執行

MVCHandler 也繼承自 IHTTPAsyncHandler。 當MVC Handler 執行時,它會異步調用httpAsyncHandler 的BeginProcessRequest 方法。

當進程請求方法被調用時,一個新的控制器被創建。 控制器是從 ControllerFactory 創建的。 有一個 ControllerBuilder 類將設置 ControllerFactory。

您也可以創建自己的 ControllerFactory,但默認情況下它將是 DefaultControllerFactory。 RequestContext 和控制器的名稱將傳遞給方法 CreateController Method 以獲取特定的控制器。

4) 控制器執行

控制器被調用,其動作被用戶請求調用。

Execute() 方法首先創建 TempData 對象。 TempData 是一個從 TempDataDictionary 類派生並存儲在短期會話中的字典,它是一個字符串鍵和對象值。

Execute() 方法根據 URL 從 RouteData 中獲取 Action。Controller 類然后調用 ContollerActionInvoker,從請求中構建參數列表。

這些從請求參數中提取的參數將作為方法參數。這些參數將傳遞給執行的任何控制器方法。

最后它會調用InvokeAction方法來執行Action。

5)調用渲染視圖方法

最后,當我們調用reutrn View()時,會調用 Render View 方法並將響應放在要顯示的頁面上。

控制器通常要么執行 RedirectToAction 方法,要么執行 RenderView 方法。 當您調用控制器的 RenderView() 方法時,該調用將委托給當前 ViewEngine 的 RenderView() 方法。

WebFormViewEngine.RenderView() 方法使用名為 ViewLocator 類的類來查找視圖。 接下來,它使用 BuildManager 從其路徑創建 ViewPage 類的實例。

接下來,如果頁面有母版頁,則設置母版頁的位置如果頁面有ViewData,則設置ViewData。 最后,在 ViewPage 上調用 RenderView() 方法。

抽象說明圖:

在此處輸入圖片說明

深度圖:

在此處輸入圖片說明

請求流”

這是asp.net mvc 請求流程:

在此處輸入圖片說明

參考鏈接

詳細理解請參考MVC頁面生命周期的理解

另外這是另一篇解釋 MVC 頁面生命周期的好文章

ASP.NET Web 窗體

  • ASP.NET Web 窗體使用頁面控制器模式方法呈現布局。 在這種方法中,每個頁面都有自己的控制器,即處理請求的代碼隱藏文件。
  • 為了實現有狀態的行為,使用了視圖狀態。 目的是為開發人員提供與典型 WinForms 應用程序相同的體驗。

ASP.NET MVC

  • 它使用前端控制器方法。 這種方法意味着所有頁面的公共控制器處理請求。

  • ASP.NET MVC 方法與 Web 一樣是無狀態的。 所以沒有viewstate的概念。

但實際上在MVC中沒有頁面生命周期本身(因為沒有'頁面'對象),但是有一個請求處理管道:

您可以從這里很好的描述中獲取幫助或參考MVC4 和頁面生命周期?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM