Может ли кто-нибудь объяснить ViewState (в ASP.NET) как можно короче?
Что такое ViewState в ASP.NET?
Ответы (4)
ViewState
— это механизм, который позволяет сохранять значения состояния при обратной передаче страницы.
Сеть не имеет состояния. Но в ASP.NET состояние страницы сохраняется на самой странице автоматически. Это делается с помощью ViewState. В ViewState значения кодируются по основанию 64 и сохраняются в скрытых элементах управления.
Когда вы просматриваете исходный код страницы (в своем браузере) страницы, использующей ViewState, вы можете увидеть этот скрытый ввод ViewState, который будет выглядеть примерно так:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM1ODM3Nj......." />
Это единственное скрытое поле содержит все значения состояния просмотра для всех элементов управления страницы.
Поскольку ViewState (по умолчанию) отправляется в клиентский браузер, а затем возвращается на сервер в виде скрытого элемента управления вводом на вашей странице, хранение значительного объема данных в ViewState может увеличить размер вашей страницы и повлиять на ее производительность.
Чтобы отключить ViewState для элемента управления, вы можете установить для свойства EnableViewState
значение false.
Короче говоря,
- Состояние сеанса для страницы
- Позволяет контролировать повторное заполнение при обратной передаче
- Зашифровано
- Помещено в скрытое поле
- Можно отключить с помощью тега enableViewState.
Из здесь:
ViewState позволяет сохранять состояние объектов (сериализуемых) в скрытом поле на странице. ViewState передается клиенту и обратно на сервер и не сохраняется на сервере или в каком-либо другом внешнем источнике. ViewState используется для сохранения состояния объектов на стороне сервера между постбэками.
СНАЧАЛА МЫ СОЗДАЕМ ФУНКЦИЮ ДЛЯ СОЗДАНИЯ 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);
}
}