禁用ViewState的ASP.NET DropDownList控件模拟'SelectedIndexChanged'的最佳方法

时间:2009-01-17 09:22:26

标签: asp.net viewstate selectedindexchanged

我发现很多帖子都是人们在SelectedIndexChanged时尝试解决EnableViewState='false'无法正常工作的问题。

我有点困惑为什么控制状态没有启动并允许它工作,但如果有人也可以解释那就是奖励积分。

有些'黑客'非常'黑客'。就像在页面本身的viewstate上设置一个与下拉值对应的值,然后将该值与在回发期间接收的值进行比较。

我正在寻找最优雅的解决方案(如果有一个好的解决方案)。

我不知道这是一个聪明的派生控件还是更聪明的东西,但我想确保解决方案足够通用,以便'可信'而不只是一个仅适用于特定页面的黑客攻击(其中这种黑客很常见!)。

3 个答案:

答案 0 :(得分:5)

如果你真的想知道为什么以及如何运作,我会建议以下文章:

TRULY Understanding ViewState

这不是一个简单的阅读,但确实涵盖了人们通常遇到的所有问题。它涵盖了为什么一切都有效,如果你填入Page_Init而不是Page_Load。

答案 1 :(得分:0)

在将列表添加到控件集合之前绑定列表(不是按照上述评论者的说法)。

- 所述文章的作者:)

答案 2 :(得分:-1)

尝试在较早的时候将数据加载到DropDownList中。 IE浏览器。在InitComplete中。我没有测试过,但我认为应该这样做。

修改

它没有做到这一点。我已经对它进行了测试,但效果并不理想。正如Ken Browning在关于这个问题的另一个答案中所指出的那样,如果SelectedIndex不是其初始值,则总会触发SelectedIndexChanged事件。

为什么SelectedIndex不是存储在ControlState中而不是存储在ViewState中。我们可以欺骗ViewState只跟踪SelectedIndex,而不存储Items集合吗?