ビューステートを圧縮したい。したがってSavePageStateToPersistenceMedium
、Web.UI.Page に属するものをオーバーライドする必要があります。「通常の」ASP.Netでは非常に簡単ですが、私のsharepoint-projectでは、Web.UI.Pageから継承されたクラスがある場所が見つかりません
私のPageLayoutsにはコードビハインドがなく、masterPageにもありません。
すべてのページにViewStateをキャッシュさせたくないので、pageLayoutでそれを処理できるようにするのが最善の解決策です。
少しわかりやすくするために。これは、「どこかに」配置したいコードです。
public abstract class BasePage : System.Web.UI.Page
{
private ObjectStateFormatter _formatter =
new ObjectStateFormatter();
protected override void
SavePageStateToPersistenceMedium(object viewState)
{
MemoryStream ms = new MemoryStream();
_formatter.Serialize(ms, viewState);
byte[] viewStateArray = ms.ToArray();
ClientScript.RegisterHiddenField("__COMPRESSEDVIEWSTATE",
Convert.ToBase64String(
CompressViewState.Compress(viewStateArray)));
}
protected override object
LoadPageStateFromPersistenceMedium()
{
string vsString = Request.Form["__COMPRESSEDVIEWSTATE"];
byte[] bytes = Convert.FromBase64String(vsString);
bytes = CompressViewState.Decompress(bytes);
return _formatter.Deserialize(
Convert.ToBase64String(bytes));
}
}