Não irei entrar no mérito sobre o que é o viewstate, mas dependendo do número de webcontrols que temos em nossa página ele se torna absurdamente grande, uma maneira de contornar isso é salvando ele na sessao.
Iremos criar um atributo no webconfig, caso ele esteja ativado ele salvará o viewstate na sessão.
C#:
| protected override object LoadPageStateFromPersistenceMedium()
|
| {
|
|
|
| object objViewState;
|
|
|
| if (ConfigurationManager.AppSettings["ServerSideViewState"] != null &&
|
| ConfigurationManager.AppSettings["ServerSideViewState"].ToUpper().Equals("TRUE"))
|
| {
|
| objViewState = Context.Session["VIEWSTATE"];
|
|
|
| if (objViewState == null)
|
| {
|
| return;
|
| // Sessao expirada
|
| }
|
|
|
| return objViewState;
|
|
|
| }
|
| else
|
| {
|
|
|
| return base.LoadPageStateFromPersistenceMedium();
|
| }
|
|
|
| }
|
|
|
| protected override void SavePageStateToPersistenceMedium(object state)
|
| {
|
|
|
|
|
| if (ConfigurationManager.AppSettings["ServerSideViewState"] != null &&
|
| ConfigurationManager.AppSettings["ServerSideViewState"].ToUpper().Equals("TRUE"))
|
| {
|
| Context.Session["VIEWSTATE"] = state;
|
| }
|
| else
|
| {
|
|
|
| base.SavePageStateToPersistenceMedium(state);
|
| }
|
|
|
| } |