2009-01-17 59 views
2

我發現很多帖子,人們試圖解決SelectedIndexChanged不工作時EnableViewState='false'的問題。模擬'SelectedIndexChanged'的ASP.NET DropDownList控件與ViewState禁用

林有點困惑爲什麼控制狀態不踢,並允許它的工作,但這是獎勵積分,如果任何人都可以解釋這一點。

一些'黑客'很漂亮'哈克'。就像在頁面本身的視圖狀態上設置一個對應於下拉值的值,然後將該值與在回發期間收到的值進行比較。

我正在尋找最好的最優雅的解決方案(如果有一個好的)。

我不知道這是否是一個聰明的派生控件或更聰明的東西,但我想確保解決方案的通用性足以'可信',而不僅僅是隻針對特定頁面的黑客攻擊這對於這種黑客來說很常見!)。

+0

爲什麼你在這種情況下禁用ViewState? – BobbyShaftoe 2009-01-17 09:29:56

+0

ViewState已被禁用,因爲列表中有大量項目,列表數據本質上多於視圖狀態 – 2009-01-17 09:38:09

回答

5

如果你真的想知道爲什麼和如何工作的,我建議下面的文章:

TRULY Understanding ViewState

這不是一件容易的讀取,但覆蓋所有的人通常與遇到的問題視圖狀態。它涵蓋了爲什麼一切工作,如果你填入Page_Init而不是Page_Load。

-1

嘗試在較早的時間將數據加載到DropDownList中。 IE瀏覽器。在InitComplete中。我沒有測試過,但我認爲應該這樣做。

編輯:

它沒有做的伎倆。我已經測試過了,但效果不理想。正如Ken Browning在這個問題的另一個回答中指出的那樣,如果SelectedIndex不是初始值,SelectedIndexChanged事件總是被觸發。

爲什麼SelectedIndex不是存儲在ControlState而是存儲在ViewState中。我們能欺騙ViewState只跟蹤SelectedIndex,而不存儲Items集合嗎?

+0

中的重複項,如下面'真正'理解視圖狀態文章中所述 - 如果您將控件添加到控制數組然後它不會保存viewstate中的數據。 – 2009-01-18 02:24:35

0

在將其添加到控件集合之前綁定列表(而不是像上面的評論者所說的那樣)。

- 作者說的文章:)

相關問題