2009-01-17 55 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

在将其添加到控件集合之前绑定列表(而不是像上面的评论者所说的那样)。

- 作者说的文章:)

相关问题