六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ViewState初探

[摘要]ViewState 的工作原理ViewState是一種機制,ASP.NET 使用這種機制來跟蹤服務器控件狀態值,否則這些值將不作為 HTTP 窗體的一部分而回傳。例如,由 Label 控件顯示的文本默認情況下就保存在 ViewState 中。作為開發人員,您可以綁定數據,或在首次加載該頁面時僅對 ...

ViewState 的工作原理
ViewState是一種機制,ASP.NET 使用這種機制來跟蹤服務器控件狀態值,否則這些值將不作為 HTTP 窗體的一部分而回傳。例如,由 Label 控件顯示的文本默認情況下就保存在 ViewState 中。作為開發人員,您可以綁定數據,或在首次加載該頁面時僅對 Label 編程設置一次,在后續的回傳中,該標簽文本將自動從 ViewState 中重新填充。因此,除了可以減少繁瑣的工作和代碼外,ViewState 通常還可以減少數據庫的往返次數。
ViewState 確實沒有什么神秘之處,它是由 ASP.NET 頁面框架管理的一個隱藏的窗體字段。當 ASP.NET 執行某個頁面時,該頁面上的 ViewState 值和所有控件將被收集并格式化成一個編碼字符串,然后被分配給隱藏窗體字段的值屬性(即 <input type=hidden>)。由于隱藏窗體字段是發送到客戶端的頁面的一部分,所以 ViewState 值被臨時存儲在客戶端的瀏覽器中。如果客戶端選擇將該頁面回傳給服務器,則 ViewState 字符串也將被回傳。在上面的圖 2 中可以看到 ViewState 窗體字段及其回傳的值。
回傳后,ASP.NET 頁面框架將解析 ViewState 字符串,并為該頁面和各個控件填充 ViewState 屬性。然后,控件再使用 ViewState 數據將自己重新恢復為以前的狀態。



關于 ViewState 還有三個值得注意的小問題。
如果要使用 ViewState,則在 ASPX 頁面中必須有一個服務器端窗體標記 (<form runat=server>)。窗體字段是必需的,這樣包含 ViewState 信息的隱藏字段才能回傳給服務器。而且,該窗體還必須是服務器端的窗體,這樣在服務器上執行該頁面時,ASP.NET 頁面框架才能添加隱藏的字段。 
頁面本身將 20 字節左右的信息保存在 ViewState 中,用于在回傳時將 PostBack 數據和 ViewState 值分發給正確的控件。因此,即使該頁面或應用程序禁用了 ViewState,仍可以在 ViewState 中看到少量的剩余字節。 
在頁面不回傳的情況下,可以通過省略服務器端的 <form> 標記來去除頁面中的 ViewState。 



充分利用 ViewState
ViewState 為跨回傳跟蹤控件的狀態提供了一條神奇的途徑,因為它不使用服務器資源、不會超時,并且適用于任何瀏覽器。如果您要編寫控件,那么肯定需要了解如何在控件中維護狀態(英文)。
開發人員在編寫頁面時同樣可以按照幾乎相同的方式來利用 ViewState,只是有時頁面會包含不由控件存儲的 UI 狀態值。您可以跟蹤 ViewState 中的值,使用的編程語法與會話和高速緩存的語法類似:
請看下面的示例:要在 Web 頁上顯示一個項目列表,而每個用戶需要不同的列表排序。項目列表是靜態的,因此可以將這些頁面綁定到相同的緩存數據集,而排序順序只是用戶特定的 UI 狀態的一小部分。ViewState 非常適合于存儲這種類型的值。代碼如下:



<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<HTML>
    <HEAD>
        <title>用于頁面 UI 狀態值的 ViewState</title>
    </HEAD>
    <body>
        <form runat="server">
            <H3>
                在 ViewState 中存儲非控件狀態
            </H3>
            <P>
                此示例將一列靜態數據的當前排序順序存儲在 ViewState 中。<br>
                單擊列標題中的鏈接,可按該字段排序數據。<br>
                再次單擊該鏈接,將按相反順序排序。
                <br><br><br>
                <asp:datagrid id="DataGrid1" runat="server" OnSortCommand="SortGrid" 
                BorderStyle="None" BorderWidth="1px" BorderColor="#CCCCCC" 
                BackColor="White" CellPadding="5" AllowSorting="True">
                    <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#006699">
                    </HeaderStyle>
                </asp:datagrid>
            </P>
        </form>
    </body>
</HTML>
<script runat="server">



    // 在 ViewState 中跟蹤 SortField 屬性
    string SortField {



        get {
            object o = ViewState["SortField"];
            if (o == null) {
                return String.Empty;
            }
            return (string)o;
        }



        set {
            if (value == SortField) {
                // 與當前排序文件相同,切換排序方向
                SortAscending = !SortAscending;
            }
            ViewState["SortField"] = value;
        }
    }



    // 在 ViewState 中跟蹤 SortAscending 屬性
    bool SortAscending {



        get {
            object o = ViewState["SortAscending"];
            if (o == null) {
                return true;
            }
            return (bool)o;
        }



        set {
            ViewState["SortAscending"] = value;
        }
    }



    void Page_Load(object sender, EventArgs e) {



        if (!Page.IsPostBack) {
            BindGrid();
        }
    }



    void BindGrid() {



        // 獲取數據
        DataSet ds = new DataSet();
        ds.ReadXml(Server.MapPath("TestData.xml"));
        
        DataView dv = new DataView(ds.Tables[0]);



        // 應用排序過濾器和方向
        dv.Sort = SortField;
        if (!SortAscending) {
            dv.Sort += " DESC";
        }



        // 綁定網格
        DataGrid1.DataSource = dv;
        DataGrid1.DataBind();
   }



   void SortGrid(object sender, DataGridSortCommandEventArgs e) {



        DataGrid1.CurrentPageIndex = 0;
        SortField = e.SortExpression;
        BindGrid();
    }



</script>



下面是上述代碼段中引用的 testdata.xml 的代碼:



<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table>
    <pub_id>0736</pub_id>
    <pub_name>New Moon Books</pub_name>
    <city>Boston</city>
    <state>MA</state>
    <country>USA</country>
  </Table>
  <Table>
    <pub_id>0877</pub_id>
    <pub_name>Binnet &amp; Hardley</pub_name>
    <city>Washington</city>
    <state>DC</state>
    <country>USA</country>
  </Table>
  <Table>
    <pub_id>1389</pub_id>
    <pub_name>Algodata Infosystems</pub_name>
    <city>Berkeley</city>
    <state>CA</state>
    <country>USA</country>
  </Table>
  <Table>
    <pub_id>1622</pub_id>
    <pub_name>Five Lakes Publishing</pub_name>
    <city>Chicago</city>
    <state>IL</state>
    <country>USA</country>
  </Table>
  <Table>
    <pub_id>1756</pub_id>
    <pub_name>Ramona Publishers</pub_name>
    <city>Dallas</city>
    <state>TX</state>
    <country>USA</country>
  </Table>
  <Table>
    <pub_id>9901</pub_id>
    <pub_name>GGG&amp;G</pub_name>
    <city>Muenchen</city>
    <country>Germany</country>
  </Table>
  <Table>
    <pub_id>9952</pub_id>
    <pub_name>Scootney Books</pub_name>
    <city>New York</city>
    <state>NY</state>
    <country>USA</country>
  </Table>
  <Table>
    <pub_id>9999</pub_id>
    <pub_name>Lucerne Publishing</pub_name>
    <city>Paris</city>
    <country>France</country>
  </Table>
</NewDataSet>



標簽:ViewState初探 

相關文章

主站蜘蛛池模板: 天天干夜夜看 | 日韩无砖2021特黄 | 在线观看国产一区亚洲bd | 日本xxx在线观看免费播放 | 人人擦人人 | 日韩r片| 日本a在线播放 | 午夜欧美性欧美 | 手机看片日韩 | 中日韩一级片 | 手机在线看片日韩 | 天天天干干干 | 一级片黄色免费 | 日本在线日本中文字幕日本在线视频播放 | 人人精品| 欧美一级淫片a免费播放口aaa | 日本成人片在线观看 | 日韩在线观看网址 | 四虎www成人影院免费观看 | 四虎久久影院 | 亚洲天堂伦理 | 夜夜爽天天狠狠九月婷婷 | 亚州视频在线 | 伊人网址 | 色综合色综合色综合 | 日本a在线视频 | 色羞羞| 三a毛片| 日韩有码在线观看 | 手机看片日韩高清国产欧美 | 深夜毛片 | 又爽又黄又无遮挡的视频在线观看 | 中文字幕三级在线不卡 | 日本一区二区三区免费观看 | 深夜福利免费视频 | 日韩在线网址 | 中国女人特级毛片 | 天堂网在线最新版www中文网 | 亚洲成人第一 | 日韩福利视频导航 | 一级做性色a爰片久久毛片免费 |