2011-09-13 34 views
1

我正在使用GridView處理ASP.net頁面。我有ViewState非常大的問題。爲什麼我的調試器在ViewState非常大時告訴我ViewState.Count = 0?

我想弄清楚如何配置我的GridView來減少ViewState中的數據,但是我遇到的第一個問題是我無法看到ViewState中的內容。

我試着在頁面代碼中的各個點上放置斷點(包括Page_Load和gridview_PageIndexChanging)。在每個斷點處,我發現ViewState.Count爲0.

爲什麼我的ViewState顯示爲空時,實際上它非常大?

+0

我假設你在回發後檢查了ViewState,對吧? –

+0

您是否曾嘗試在GridView上將'EnableViewState'設置爲false,以查看這會如何影響ViewState的大小? –

回答

2

在asp.net中,每個控件都維護自己的viewstate。當您在頁面事件中檢查ViewState.Count時,您正在檢查頁面viewstate屬性的狀態包。

如果您在頁面類中有任何屬性,例如ViewState["test"] = value,您將看到它的計數。你將無法從你的頁面類中看到gridview的viewstate。視圖狀態計數在頁面上爲空,因爲您沒有將任何屬性添加到視圖狀態。

但是,當瀏覽器渲染頁面時,頁面及其控件的所有視圖狀態信息都將放入viewstate的隱藏變量中。

要將gridview的數據放入viewstate中,您必須進行分頁。如果它的分頁,gridview只爲可見行放置viewstate,這應該是最小的。如果你想完全禁用gridview的viewstate,你可以在gridview控件和數據綁定上執行一個enableviewstate="false"viewstatemode (.net 4.0),每個頁面加載包括回發。

+0

在這種特殊情況下,我只想讓GridView記住頁面索引和頁面大小。我不希望它在任何情況下都回發「RowCommands」的整個gridview的內容。 –

+0

網格視圖的頁面大小是多少?如果它一次不顯示太多行,那麼視圖狀態不會太大,除非列數太多。如果你有一個命令行動的按鈕,如果你不想回發,你可能會有他們的Ajax調用。不知道你在做什麼。但是gridview必須找回正在嘗試顯示的數據。如果您沒有將它存儲在視圖中,則需要在每次回發時進行綁定。如果你想避免回發,你必須嘗試一些jquery/ajax或回調方法。 –

相關問題