【问题标题】:What is the ViewState in ASP.NET? [closed]ASP.NET 中的 ViewState 是什么? [关闭]
【发布时间】:2010-04-16 10:47:13
【问题描述】:

谁能尽可能简洁地解释 ViewState(在 ASP.NET 中)?

【问题讨论】:

标签: asp.net .net viewstate


【解决方案1】:

ViewState 是允许跨页面回发保留状态值的机制。

网络是无状态的。但是在 ASP.NET 中,页面的状态是在页面本身中自动维护的。这是使用 ViewState 完成的。在 ViewState 中,值是 base 64 编码并保存在隐藏控件中。

当您查看使用 ViewState 的页面的页面源(在您的浏览器中)时,您可能会看到这个隐藏的 ViewState 输入,如下所示:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM1ODM3Nj......." /> 

这个隐藏字段包含所有页面控件的所有视图状态值。

因为 ViewState(默认情况下)发送到客户端浏览器,然后以页面上隐藏输入控件的形式返回到服务器,所以在 ViewState 中存储大量数据会增加页面大小并可能影响您的页面性能。

要禁用控件的 ViewState,可以将 EnableViewState 属性设置为 false。

【讨论】:

    【解决方案2】:

    总之,

    1. 页面的会话状态
    2. 允许在回发时重新填充控件
    3. 加密
    4. 放置在隐藏字段中
    5. 可以通过 enableViewState 标签关闭

    【讨论】:

      【解决方案3】:

      来自here

      ViewState 允许将对象的状态(可序列化)存储在页面上的隐藏字段中。 ViewState 被传输到客户端并返回到服务器,而不是存储在服务器或任何其他外部源上。 ViewState 用于在回发之间保留服务器端对象的状态。

      【讨论】:

        【解决方案4】:

        我们首先为 VIEWSTATTE 创建一个函数
        dgpayment 是 gridview

        private void BindGrid(int rowcount)
            {
                DataTable dt = new DataTable();
                DataRow dr;
                dt.Columns.Add(new System.Data.DataColumn("AccName", typeof(String)));
                dt.Columns.Add(new System.Data.DataColumn("Remarks", typeof(String)));
                if (ViewState["CurrentData"] != null)
                {
                for (int i = 0; i < rowcount + 1; i++)
                {
                dt = (DataTable)ViewState["CurrentData"];
                if (dt.Rows.Count > 0)
                {
                dr = dt.NewRow();
                dr[0] = dt.Rows[0][0].ToString();
                }
                }
                dr = dt.NewRow();
                dr[0] = txtAccntName.Text;
                dr[1] = txtRemark.Text;
                dt.Rows.Add(dr);
                }
                else
                {
                dr = dt.NewRow();
                dr[0] = txtAccntName.Text;
                dr[1] = txtRemark.Text;
                dt.Rows.Add(dr);
                }
                if (ViewState["CurrentData"] != null)
                {
                dgPayment.DataSource = (DataTable)ViewState["CurrentData"];
                    dgPayment.DataBind();
                }
                else
                {
                dgPayment.DataSource = dt;
                dgPayment.DataBind();
                }
         ViewState["CurrentData"] = dt;
        
         }
        

        添加按钮添加代码之后

         protected void btnADD_Click(object sender, EventArgs e)
            {
            if (ViewState["CurrentData"] != null)
            {
            DataTable dt = (DataTable)ViewState["CurrentData"];
            int count = dt.Rows.Count;
            BindGrid(count);
            }
            else
            {
            BindGrid(1);
            }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-27
          • 2010-10-03
          • 1970-01-01
          • 2011-06-06
          • 2019-11-14
          • 2010-10-23
          • 1970-01-01
          相关资源
          最近更新 更多