2008-10-07 26 views
1

要澄清所有此问题,绝对不是源于控件的重新绑定,并且绑定后该值不会保留初始值。DropDownList何时在SelectedIndexChanged事件处理程序中保留来自回发的值

我在一个正在被用于多个项目的aspx页面上有一个DropDownList。

沿着页面的生命周期,在处理SelectedIndexChanged事件之前,SelectedValue被改变。

在代码到达事件处理程序的一个项目中,SelectedValue返回从客户端发布的内容,而另一个项目中存在新的SelectedValue。

Viewstate在两种情况下都处于开启状态,控件没有被反弹,并且遵循了我可以收集的所有相同的流程。

该控件没有被再次初始化,我彻底检查了这一点,并没有保留初始值,而是保留了代码中设置的值。

我实际上需要在第一个项目中发生的事件处理程序点处的发布值,但不明白为什么它会更改回发布的值以及如何在第二个项目中复制此行为。

我会很乐意进一步澄清,如果有任何不清楚。

回答

2

也许某些初始化在on_load事件中执行了两次,因为您不检查页面是否在测试中使用IsPostBack回发?

它到底会发生到我同事的一个十分钟前:-)

+0

该控件没有被再次绑定,逻辑与postback无关 – YonahW 2008-10-07 13:34:42

0

我通常看到这种行为,当我忘记在某处签到的IsPostBack。在进入SelectedIndexChanged事件处理程序之前,页面将加载所有原始数据。

2

许多人错误地认为DropDownLists必须具有ViewState才能保留选定的值。我几乎从来没有在DropDownLists上将EnableViewState设置为true,因为它们可以在发布值的表单中正常工作。 (并将其设置为true,在数据绑定控件会造成长期的ViewState)

的公布值(在下拉列表中选择的项目)从后参数加载页面是OnInit后,因此,如果您绑定数据到OnInit的下拉菜单中,它将正常工作。

如果你绑定在OnLoad,选定的值将被覆盖。

也许你是在错误的事件数据绑定,以便所选的值被下拉的DataBind调用覆盖?

+0

我的印象是,viewstate并不是必要的,但它现在在那里。 虽然我正在改变SelectedValue,但我并没有重新绑定控件,并且代码在两个项目中都完全相同,其中一个项目不会丢失值。 – YonahW 2008-10-07 13:36:24

相关问题