任何人都可以尽可能简洁地解释ViewState(在ASP.NET中)吗?
答案 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)
简而言之,
答案 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);
}
}