public
class
CompressPageStatePersister:PageStatePersister
{
private string pagestateKey = " __VIEWSATE " ;
public CompressPageStatePersister(Page p): base (p)
{
}
public override void Save()
{
if ( ! Page.EnableViewState)
{
this .ViewState = null ;
}
if ( this .ViewState != null || this .ControlState != null )
{
Pair state = new Pair(ViewState, ControlState);
var str = CompressHelp.Compress(state);
Page.ClientScript.RegisterHiddenField( this .pagestateKey, str);
}
}
public override void Load()
{
string postbackState = Page.Request.Form[pagestateKey];
if ( ! string .IsNullOrEmpty(postbackState))
{
Pair statePair = (Pair) CompressHelp.Decompress(postbackState);
if ( ! Page.EnableViewState)
{
this .ViewState = null ;
}
else
{
this .ViewState = statePair.First;
}
this .ControlState = statePair.Second;
}
}
}
public class CompressHelp
{
private static LosFormatter formatter = new LosFormatter();
public static string Compress( object state)
{
StringWriter writer = new StringWriter();
formatter.Serialize(writer, state);
string stateString = writer.ToString();
writer.Close();
byte [] buffer = Convert.FromBase64String(stateString);
MemoryStream ms = new MemoryStream();
GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress, true );
zipStream.Write(buffer, 0 , buffer.Length);
zipStream.Close();
buffer = new byte [ms.Length];
ms.Position = 0 ;
ms.Read(buffer, 0 , buffer.Length);
ms.Close();
stateString = Convert.ToBase64String(buffer);
return stateString;
}
public static object Decompress( string stateString)
{
byte [] buffer = Convert.FromBase64String(stateString);
MemoryStream ms = new MemoryStream();
GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
MemoryStream msReader = new MemoryStream();
buffer = new byte [ 0x1000 ];
while ( true )
{
int read = zipStream.Read(buffer, 0 , buffer.Length);
if (read < 0 )
{
break ;
}
msReader.Write(buffer, 0 , read);
}
zipStream.Close();
ms.Close();
msReader.Position = 0 ;
buffer = msReader.ToArray();
stateString = Convert.ToBase64String(buffer);
return formatter.Deserialize(stateString);
}
}
{
private string pagestateKey = " __VIEWSATE " ;
public CompressPageStatePersister(Page p): base (p)
{
}
public override void Save()
{
if ( ! Page.EnableViewState)
{
this .ViewState = null ;
}
if ( this .ViewState != null || this .ControlState != null )
{
Pair state = new Pair(ViewState, ControlState);
var str = CompressHelp.Compress(state);
Page.ClientScript.RegisterHiddenField( this .pagestateKey, str);
}
}
public override void Load()
{
string postbackState = Page.Request.Form[pagestateKey];
if ( ! string .IsNullOrEmpty(postbackState))
{
Pair statePair = (Pair) CompressHelp.Decompress(postbackState);
if ( ! Page.EnableViewState)
{
this .ViewState = null ;
}
else
{
this .ViewState = statePair.First;
}
this .ControlState = statePair.Second;
}
}
}
public class CompressHelp
{
private static LosFormatter formatter = new LosFormatter();
public static string Compress( object state)
{
StringWriter writer = new StringWriter();
formatter.Serialize(writer, state);
string stateString = writer.ToString();
writer.Close();
byte [] buffer = Convert.FromBase64String(stateString);
MemoryStream ms = new MemoryStream();
GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress, true );
zipStream.Write(buffer, 0 , buffer.Length);
zipStream.Close();
buffer = new byte [ms.Length];
ms.Position = 0 ;
ms.Read(buffer, 0 , buffer.Length);
ms.Close();
stateString = Convert.ToBase64String(buffer);
return stateString;
}
public static object Decompress( string stateString)
{
byte [] buffer = Convert.FromBase64String(stateString);
MemoryStream ms = new MemoryStream();
GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress);
MemoryStream msReader = new MemoryStream();
buffer = new byte [ 0x1000 ];
while ( true )
{
int read = zipStream.Read(buffer, 0 , buffer.Length);
if (read < 0 )
{
break ;
}
msReader.Write(buffer, 0 , read);
}
zipStream.Close();
ms.Close();
msReader.Position = 0 ;
buffer = msReader.ToArray();
stateString = Convert.ToBase64String(buffer);
return formatter.Deserialize(stateString);
}
}