我想壓縮viewstate。因此我需要重寫屬於Web.UI.Page的SavePageStateToPersistenceMedium
。在「正常」的ASP.Net很容易,但在我的SharePoint項目中我找不到任何地方,我有一個從Web.UI.Page繼承的類如何覆蓋Web.UI.Page - Sharepoint中的事件?
我的PageLayouts沒有代碼背後,也沒有masterPage 。
最好的解決方案是我可以在pageLayout中處理這個問題,因爲我不希望每個頁面都緩存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));
}
}
一個快速的想法,也許不工作。創建一個委託控件,您將放入AdditionalPageHead。檢查控件的Init事件如果符合條件,並使用反射調用此受保護的屬性。 –