1

澄清所有这些问题绝对不是源于重新绑定控件,并且绑定后值不会保持初始值。

我在多个项目中使用的 aspx 页面上有一个 DropDownList。

在页面的生命周期中,SelectedValue 在处理 SelectedIndexChanged 事件之前发生更改。

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

Viewstate 在这两种情况下都处于打开状态,控件没有被反弹,并且遵循与我能收集到的所有内容完全相同的流程。

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

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

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

4

3 回答 3

2

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

十分钟前我的一位同事恰好发生了这种情况:-)

于 2008-10-07T13:19:40.100 回答
2

许多人错误地认为 DropDownLists 必须启用 ViewState 才能保留选定的值。我几乎从来没有在 DropDownLists 上将 EnableViewState 设置为 true,因为它们在带有已发布值的表单中工作正常。(并且在 DataBinding 控件上将其设置为 true 将导致长视图状态)

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

如果您在OnLoad中绑定,则选定的值将被覆盖。

也许您在错误的事件中进行了数据绑定,以便选定的值被下拉菜单上的 DataBind 调用覆盖?

于 2008-10-07T13:28:33.857 回答
0

当我忘记在某处检查 IsPostback 时,我通常会看到这种行为。该页面将在转到 SelectedIndexChanged 事件处理程序之前加载所有原始数据。

于 2008-10-07T13:21:41.360 回答