熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET服務器控件視圖淺析

2022-06-13   來源: .NET編程 

  ASPNET服務器控件視圖的必要性如果我們的服務器控件需要較完備的GUI譬如需要控制HTML元素的附加屬性字體顏色高度等那麼應當從Control的子類WebControl繼承以得到所需的基礎性能從WebControl類派生需要遵守通常如下的約定

   包含從SystemWebUIWebControl的命名空間的引用

   不能夠重載Render方法直接向輸出流提供數據而應當重載RenderContents方法來實現

   通常情況下WebControl的派生類最終在輸出流中表現為<span>標簽但是如果自己希望使用其它的標簽就應當重載WebControl的tagKey屬性或者TagName屬性

  ASPNET服務器控件視圖學習的經驗(或者說MS建議)

  如果控件生成非可視化元素或顯示給非HTML客戶端那麼應當選用Control作為符類繼承如<meta><xml>等標簽

  提供HTML界面的從WebControl繼承

  擴展修改功能時應當從一個已存控件派生但是不要從SystemWebUIHtmlControls命名空間派生因為設計器不承認從該類派生的控件

  為了能夠支持設計器實現設計期那麼需要考慮attribute(元數據)的編程

  ASPNET服務器控件視圖之視圖狀態

  Web編程很重要的一個方面是狀態管理也就是解決在無狀態的http協議基礎上的狀態管理問題在asp類web編程技術時代這通常通過以下技術手段來解決

   Session

   Cookies

   隱藏變量

   URL攜參

  然而以上方案都有自身的缺陷譬如Session不宜擴展Cookies在特定情況下可能不可用隱藏變量不易管理URL攜參有長度限制且容量有限

  綜合考慮MS提出了基於隱藏變量方案的ViewState(視圖)的概念通過視圖保存個ASPNET頁間的服務器端控件狀態視圖是如何工作的呢?

  在處理一個Web請求後頁面框架會收集頁面控件樹中所有控件的狀態並且創建一個視圖對象每一個Control都有一個ViewState字典保存自己的狀態當輸出html到客戶時將全部ViewState進行串行化為一個字符串表達式作為隱含變量發送到客戶端通常情況下我們將視圖的串行化子符串在服務器同客戶端間進行傳遞上一個請求的隱含變量會回傳到服務器端進行並行化然後還原給服務器控件本質上是一個隱含變量但是在隱含變量基礎上加入了ASPNET的管理功能這就是視圖的本質

  Control的EnableViewState決定了控件是否同意將自己的狀態交給自動化的視圖管理

  當一個控件需要保存狀態時候沒人可以支持保存的屬性為int boolean 等簡單原生數據類型如果是較為復雜的屬性值類型需要編程者提供類型轉換器將值數據轉換為字符串若未提供

  那麼采用代價高昂的二進制串行化功能(逐個byte的進行)視圖數據在傳遞過程中通過傳遞一個附加的摘要來確保數據不被篡改(但無法保證不被窺探畢竟base編碼近乎明文)

  ASPNET服務器控件視圖方面的內容就簡單的向你介紹到這裡希望對你學習ASPNET服務器控件視圖方面有所幫助


From:http://tw.wingwit.com/Article/program/net/201311/12501.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.