2008-08-04 11 views
21

我需要獲取ViewState的base64編碼表示形式。很明顯,只有在請求生命週期的相當晚的時間才能使用,這是可以的。如何獲取構建,編碼的ViewState的值?

例如,如果頁面的輸出包括:

<input type="hidden" name="__VIEWSTATE" 
    id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" /> 

我需要一種方法在服務器端來獲取值"/wEPDwUJODU0Njc5MD...=="

爲了澄清,我需要這個值,當頁面正在渲染,而不是回發。例如我需要知道正在向發送給客戶端的ViewState值,而不是我從他們那裏得到的ViewState。

回答

3

看到這個blog post這裏筆者介紹了一種覆蓋生成ViewState的默認行爲,而是展示瞭如何將其保存在服務器會話對象。

在ASP.NET 2.0,ViewState是由 PageStatePersister 類的後代保存。這個類是一個抽象類 用於保存和加載ViewsState和 在.NET Framework中有兩個實現後代 ,這個類名爲 HiddenFieldPageStatePersister和 SessionPageStatePersister。默認情況下, HiddenFieldPageStatePersister用於保存/加載ViewState信息, 但我們可以很容易地得到 SessionPageStatePersister工作和 保存Session對象中的ViewState。

雖然我沒有測試他的代碼,但它似乎完全顯示了你想要的:在回發之前,仍然在服務器上訪問ViewState代碼的方法。

2

我啓用了與上面發佈的類似文章的壓縮。在應用程序發送之前訪問ViewState的關鍵是重寫此方法;

protected override void SavePageStateToPersistenceMedium(object viewState) 

您可以在此重寫中調用基本方法,然後添加處理ViewState所需的任何其他邏輯。