asp.net伺服器控制項開發(二) :ViewState的基本運用

來源:互聯網
上載者:User

這篇文章我講介紹Asp.net伺服器控制項的一個令人振奮的機制----ViewState,為什麼說ViewState是一個令人振奮的機制呢?我們知道,在一個web請求的期間之外保持資訊是十分必要的。在傳統asp狀態管理編程中,我們可以用伺服器端的session對象或者用戶端的cookies對象來保持資訊,但是session狀態不可擴充,cookies又不能被所有的應用程式所依賴。因此,asp.net提供了所謂的檢視狀態,即iewstate機制,這種機制可以使頁面和它的子控制項在從伺服器到用戶端再從用戶端返回的往返過程中保持狀態資訊,它可以在一個固有的無狀態環境之上創造一個有狀態的並持續執行的頁面效果。
使用檢視狀態最簡單的方法就是通過控制項從Control類繼承來的ViewState屬性,它屬於System.Web.UI.StateBag類型,是一個鍵/值對的字典。下面給出一個簡單的執行個體來說明ViewState的使用,讓我們對ViewState有一個直觀的瞭解

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ServerControls 
{
    public class ViewStateDemoLabel : WebControl 
    {
        private string _text;
        public string Text 
        {
            get 
            {
                return (_text == null) ? String.Empty : _text;
            }
            set 
            {
                _text = value;
            }
        }

        public string TextInViewState 
        {
            get 
            {
                object o = ViewState["TextInViewState"];
                return (o == null)? String.Empty : (string)o;
            }
            set
            {
                ViewState["TextInViewState"] = value;    
            }
        }

        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.Write("Text = ");
            writer.Write(Text);
            writer.Write("<br>");
            writer.Write("TextInViewState = ");
            writer.Write(TextInViewState);
        }
    }
}

 

<html>
  <head>
    <script runat="server">
      void button1_Click(object sender, EventArgs e)
      {
          demolabel1.Text = textbox1.Text;
          demolabel1.TextInViewState = textbox2.Text;
      }
    </script>
  </head>
  <body>
    <form runat="server">
      <mspuc:SiteHeader id="SiteHeader1" runat="server" SubHeading="ViewStateDemoLabel test page" Heading="Chapter 7" />
      <br>
      Enter your first name:&nbsp;
      <asp:TextBox id="textbox1" runat="server" />
      <br>
      Enter your last name:&nbsp;
      <asp:TextBox id="textbox2" runat="server" />
      <br>
      <br>
      <asp:Button text="Submit" onClick="button1_Click" id="button1" Runat="server" />
      <asp:Button Text="Reload" Runat="server" id="Button2" />
      <br>
      <br>
      Here is the output from the ViewStateDemoLabel:
      <br>
      <msp:ViewStateDemoLabel id="demolabel1" runat="server" Font-Names="Verdana" Font-Size="Medium" />
      <br>
      <mspuc:SiteFooter id="SiteFooter1" runat="server" />
    </form>
  </body>
</html>

這裡定義了兩個屬性,其中Text屬性沒有用到ViewState而TextInViewState屬性用了ViewState。運行這段代碼,你發現當頁面post回服務端後,當頁面重新載入的時候,Text屬性的值並沒有被儲存下來,而TextInViewState屬性的值卻被儲存了下來,它會在上一次請求的處理過程的最後將他們的狀態值儲存到ViewState中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.