• ViewState与Session的区别(转)


    最近在做分页控件时发现记录当前索引页都采用ViewState而不采用Session,再一看二者的使用可以说几乎没什么区别,那二者是不是完全等同的呢。再仔细查阅与尝试下发现了二者的区别,很细微的区别,但是确实是我们在开发WEB页面中应该注意的。
            session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上. 另外,session在默认情况下20分钟就过期,而viewstate则永远不会过期. 
            但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.
            当然,任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更多的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值。

    以下是我在做分页Repeater控件时的Load代码:

    protected void Page_Load(object sender, EventArgs e)
        {
            BraveboyDataTable = (DataTable)BraveboyRepeater.DataSource; //获得数据源
            if (!Page.IsPostBack)
            {            
                CurrentPage = 0;
                ViewState["PageIndex"] = 0;

                //计算总共有多少条记录
                RecordCount = CalculateRecord();
                //计算总共有多少页
                PageCount = (RecordCount + PageSize - 1) / PageSize;
                lblPageCount.Text = PageCount.ToString();
                ViewState["PageCount"] = PageCount;
                BraveboyBindData();       
            }
            CurrentPage = (int)ViewState["PageIndex"];
            PageCount = (int)ViewState["PageCount"];
        }

    如果没有最后两句
    CurrentPage = (int)ViewState["PageIndex"];
    PageCount = (int)ViewState["PageCount"];
    则每次点击翻页时,CurrentPage、PageCount 就未知的,而用ViewCount就很好的解决了这个问题。
    注:其中在每次翻页时会修改ViewState["PageIndex"]的值。

  • 相关阅读:
    gitlab搭建
    .NET Core 跨平台物联网开发:设置委托事件(二)
    .NET Core 跨平台物联网开发:连接阿里云IOT(一)
    Orange Pi 3 GPIO 笔记
    树莓派踩坑备忘录 -- 使用 Linux
    .NET Core / C# 开发 IOT 嵌入式设备的个人见解
    阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台
    跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
    .NET Core 使用 EF 出错的解决方法
    arm 开发板更新 gcc/gcc++ | Debain 更新 gcc,无需编译直接更新 gcc
  • 原文地址:https://www.cnblogs.com/myitm/p/1699313.html
Copyright © 2020-2023  润新知