Asp.net 2.0 ViewState原理

來源:互聯網
上載者:User

ViewState相信大家都會使用,可ViewState到底是什麼,又有多少人知道呢?

StateBag類這個就不用多說啦吧

在Asp.net 2.0 裡,用到StateBag有三處

1 Control._viewState  這個就是大家使用的ViewState

2 WebControl.attrState這個是存放Attribute的

3 Style.statebag是存放樣式的
.......
Page生命週期內SaveAllState時

需要先產生個Piar類,在調用this.SavePageStateToPersistenceMedium(pair1);時,將其序列化

注意:Asp.net2.0隻實現了HiddenFieldPageStatePersister,使用者可以從重寫,或者使用ControlAdapter提供其它形式的進理機制

HiddenFieldPageStatePersister.Save時會過pair1進行序列化

序列化時,.net提供了三種方式

1使用密鑰

2.使用Mac

3不使用

  //先序列化
  this.Serialize(outputStream, stateGraph);

 outputStream.SetLength(outputStream.Position);
 byte[] buf = outputStream.GetBuffer();

  int length = (int)outputStream.Length;
          
//判斷當前Page.RequiresViewStateEncryptionInternal屬性傳回值是不是需要加密            
//如果未調用Page.RegisterRequiresViewStateEncryption,則預設為false               
//如果介面設定了RegisterRequiresViewStateEncryption和EnableViewStateMac,加密優先於Mac
               
if ((this._page != null) && this._page.RequiresViewStateEncryptionInternal)    //加密               
{                   
    buf = MachineKeySection.EncryptOrDecryptData(true, buf, this.GetMacKeyModifier(), 0, length);                   
    length = buf.Length;              
}              
else if (((this._page != null) && this._page.EnableViewStateMac) || (this._macKeyBytes != null))//設定可以使用Mac               
{                   
    buf = MachineKeySection.GetEncodedData(buf, this.GetMacKeyModifier(), 0, ref length);               
}

text = Convert.ToBase64String(buf, 0, length); // null of either

談到這,很多人要問pair1裡放的是什麼,我畫了一幅圖,詳細說明了一下




相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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