我注意到一些控件(例如TextBox)在回发之间保持更改,即使更改是由客户端脚本进行的,而其他一些则没有(例如ListBox)。谁能解释我为什么?有没有办法将第一个行为扩展到其他控件? 谢谢!
答案 0 :(得分:1)
这取决于ListBox何时被数据绑定或正在填充ListItem。
通常,当在另一个父控件(如Repeater)中创建ListBox并且Repeater在Page_Load事件中受数据绑定时,会发生这种情况。这意味着在Page_Load事件结束之前,ListBox实际上不存在。
ViewState将在页面控件的Page_Init和Page_Load事件之间的某处恢复到ListBox。如果在Load事件期间创建了ListBox的内容,这意味着ListBox的ViewState无法在PostBack之后恢复内容,并且无法跟踪并自动从PostBack中选择新的SelectedValue。
如果此情况下的Repeater在Page_Init事件中是数据绑定的,则在Page_Init事件和ViewState能够正确恢复并自动选择SelectedValue之后,ListBox的内容将准备就绪。
我通常会在Page_Init事件中对所有内容进行数据绑定,以确保控件能够正确使用ViewState。
有关详细信息,请查看ASP.NET Web表单的页面生命周期。
答案 1 :(得分:0)
所有控件都会在回发之间保持更改 - 除非您以编程方式再次创建它们。
可能你的ListBox会丢失更改,因为你在每个PostBack上填充它。
尝试
if(!IsPostBack)
{
PopulateMyListBox()
}