2

ビューステートを圧縮したい。したがって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));
    }
}
4

1 に答える 1

1

代わりに PublishingLayoutPage から継承し (逆にPage から継承します)、すべてのページ レイアウトでこのベース ページをコード ビハインドとして使用できるようにします。これは、ページ レイアウトのページ ディレクティブを次のように変更する必要があることを意味します。

<%@ Page Language="C#" Inherits="YourNameSpace.BasePage, $SharePoint.Project.AssemblyFullName$" %>
于 2012-07-04T12:44:58.460 に答える