asp.net頁面模型

來源:互聯網
上載者:User
這兩天在看《ASP.NET伺服器控制項與組件開發》,解決了不少困惑。
從ASP轉到ASP.NET的一個很大的原因就是伺服器控制項的易用性,自動的狀態保持,以及方便的事件註冊,但當時並不明白是怎麼實現的。因為HTTP請求是無狀態的,所以在ASP中我們需要將要儲存的值在隱藏欄位裡提交回去或者放入SESSION或者COOKIE中。而在.NET中,頁面架構實際上是類比了一個有狀態的類似傳統型程式的過程。每一個後續的請求都是在前一個請求中斷的地方恢複並繼續執行。而這種類比是靠以下幾個邏輯階段實現的。
拿一個TextBox做為例子(別的控制項甚至頁面和它也差不多),當請求到達頁面時,如果它被列入了要產生的控制項樹,那它就會被頁面或者別的控制項調用它的構造器來執行個體化。控制項樹的產生也是很有意思的,所有派生自Control類的控制項(頁面也是間接派生自Control),都有可重載的Render和RenderChildren方法和RenderControl(寫程式時可以重載這些方法,加入自己的處理邏輯),頁面控制項首先會建立一個HtmlTextWriter的執行個體,然後將這個對象傳給RenderControl方法,RenderControl方法會檢查控制項的Visible屬性,如果為真,就調用Render方法,Render方法預設的實現會調用RenderChildren方法,而這個方法預設會調用每個子控制項的RenderControl方法,這樣通過遞迴,就完成了控制項樹的產生。下面是從書中看到的代碼。public void RenderContrl(HtmlTextWriter writer){
if(Visible)
{Render(Writer);}
}
protected virtual void Render(HtmlTextWriter writer)
{
RenderChildren(writer);
}
protected virtual void RenderChildren(HtmlTextWriter writer)
{
foreach (Control c in Controls)
{c.RenderControl(writer);}
}

而HtmlTextWriter是什麼東東呢?查一下MSDN,可以看到它們於System.Web.UI命名空間中,其解釋是“在 Web Form頁上寫出一系列連續的 HTML 特定字元和文本。此類提供 ASP.NET 伺服器控制項在將 HTML 內容呈現給用戶端時所使用的格式化功能”。
回到頁面模型,每個控制項執行個體化時都會預設調用OnInit方法(引發Init事件),在此過程中可以重載OnInit方法來添加自己的初始化邏輯。然後就到了實現有狀態的WEB程式的最重要的幾步,最先是頁面自動調用TrackViewState方法,跟蹤檢視狀態的更改,並儲存到控制項的StateTag對象中。如果是回傳,則會調用LoadViewState方法,用來恢複ViewState字典,像TextBox這樣實現了IPostBackDataHandler介面,則會通過LoadPostData方法更新控制項資料狀態。再接送就是載入(load),這時所有控制項的所有最後狀態已經保留。下一步如果是回傳,則會觸發RaisePostDataChangedEvent方法,如果不是,則進入PreRender,然後儲存檢視狀態,產生控制項(Render),卸載(Unload)(清除工作),釋放(Dispose)(釋放所有資源)。
至此,頁面處理完成,處理常式會將產生的HTML流輸出到用戶端。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.