澄清所有这些问题绝对不是源于对控件的重新绑定,并且值在绑定后不会保持初始值。
我在aspx页面上有一个DropDownList,它正在多个项目中使用。
在处理SelectedIndexChanged事件之前,在页面的生命周期中更改SelectedValue。
在一个项目中,当代码到达事件处理程序时,SelectedValue返回到从客户端发布的内容,而在另一个项目中,新的SelectedValue存在。
在两种情况下,Viewstate都处于打开状态,控件没有被反弹,并且跟随我可以收集的完全相同的流量。
控件没有再次初始化,我彻底检查了这一点并且不保留初始值,而是保留代码中设置的值。
我实际上需要在第一个项目中发生事件处理程序时发布的值,但不理解为什么它会更改回已发布的值以及如何在第二个项目中复制此行为。
如果有任何不清楚的地方,我将很乐意澄清。
答案 0 :(得分:2)
也许在on_load事件中执行了两次初始化,因为你没有检查页面是否在测试中使用IsPostBack回发了?
十分钟前,我的同事发生了这件事: - )
答案 1 :(得分:2)
许多人错误地认为DropDownLists必须具有ViewState才能保留选定的值。我几乎从未在DropDownLists上将EnableViewState设置为true,因为它们在具有已发布值的表单中工作正常。 (并在DataBinding控件上将其设置为true将导致长视图状态)
发布的值(下拉列表中的选定项目)是从页面中 OnInit 之后的后置参数加载的,因此如果您将数据绑定到OnInit中的下拉列表,它将正常工作。
如果您绑定在 OnLoad 中,则会覆盖所选的值。
也许您在错误事件中进行数据绑定,以便所选值被下拉列表中的DataBind调用覆盖?
答案 2 :(得分:0)
当我忘记在某处检查IsPostback时,我通常会看到这种行为。该页面将在转到SelectedIndexChanged事件处理程序之前加载所有原始数据。