zoukankan      html  css  js  c++  java
  • 服务器控件编程中的控件状态保存机制

    服务器控件(Server Control)是ASP.NET中的一个亮点。我们知道大部分的服务器控件是依赖视图状态(ViewState)的,这个状态的保存有助于在回发(Postback)过程中保留当前控件的值,并进行还原。

    虽然视图状态很有用,但它也会带来一些负面的影响,例如它将使得页面体积变大一些,因为它是用字符串(当然是已经经过编码的字符串)的形式保存在页面的一个隐藏域(Hidden Field)中的。基于性能方面的考虑,很多人都建议在合适的时候禁用视图状态(不管是在应用程序级别、页面级别,还是在控件级别),典型的做法例如下面这样就可以了

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" EnableViewState="false" %>

    但是,如果视图状态一旦被禁用,那么就自然而然会失去了自动保留状态的特性。这个问题,尤其当我们在开发服务器控件的时候会很严重,一个事实就是:我们无法预知也无法控制使用者是否会在页面级别关闭视图状态。

    为此,ASP.NET提供了另外一种机制,我们称为控件状态(Control State)。这使得控件开发者可以自己决定是否保存状态,而不受使用者或者调用方所左右。因为视图状态是无法被禁用的

    下面是一个典型的写法

    #region 控件状态及其保存

    protected override void OnLoad(EventArgs e)

    {

    base.OnLoad(e);

    Page.RequiresControlState(this);//这句代码很重要,声明我们需要为该控件进行状态保存

    }

    protected override void LoadControlState(object savedState)//重写该方法进行状态的还原

    {

    base.LoadControlState(savedState);

    object[] status = (object[])savedState;

    m_RecordCount =(int) status[0];

    m_PageSize = (int)status[1];

    m_IndexNum = (int)status[2];

    m_pageIndex = (int)status[3];

    }

    protected override object SaveControlState()//重写该方法进行状态的保存

    {

    object[] status = new object[] { m_RecordCount, m_PageSize, m_IndexNum,m_pageIndex };//如果有多个属性需要保存,可以通过一个对象数组的方式保存

    return status;

    }

    #endregion

  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1427827.html
Copyright © 2011-2022 走看看