2

我想压缩视图状态。因此我需要覆盖SavePageStateToPersistenceMedium属于 Web.UI.Page 的那个。在“正常”的 ASP.Net 中,这很容易,但在我的共享点项目中,我找不到任何地方我有一个从 Web.UI.Page 继承的类

我的 PageLayouts 没有代码,masterPage 也没有。

最好的解决方案是让我能够在 pageLayout 中处理它,因为我不希望每个 Page 都缓存 ViewState。

让它更清楚一点。这是我想放在“某处”的代码:

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 回答