ASP.NET中的ViewState是什么?

时间:2010-04-16 10:47:14

标签: asp.net .net viewstate

任何人都可以尽可能简洁地解释ViewState(在ASP.NET中)吗?

4 个答案:

答案 0 :(得分:5)

ViewState是一种允许在页面回发中保留状态值的机制。

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

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

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

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

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

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

答案 1 :(得分:1)

简而言之,

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

答案 2 :(得分:0)

来自here

  

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

答案 3 :(得分:0)

我们首先为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);
    }
    }