2010-06-29 72 views
1

我注意到一些控件(例如TextBox)在回发之间保留其更改,即使更改是由客户端脚本进行的,而其他一些控件则不会(例如ListBox)。任何人都能解释我为什么?有没有办法将第一个行为扩展到其他控件? 谢谢!ViewState和客户端更改

+1

被标记为任何机会'ReadOnly'这些非改变文本框? – 2010-06-29 11:28:51

+0

不,他们不是:) – astorcas 2010-06-29 13:40:46

回答

1

这取决于当列表框是被数据绑定或列表项被填充上。

通常情况下,当ListBox在另一个父控件(例如Repeater)中创建并且Repeater在Page_Load事件中数据绑定时会发生此类情况。这意味着ListBox实际上不存在,直到Page_Load事件结束。

ViewState被还原到页面控件的Page_Init和Page_Load事件之间的某处的ListBox中。如果ListBox的内容在Load事件中创建,这意味着ListBox的ViewState无法在PostBack之后恢复内容,并且无法跟踪并自动从PostBack中选择新的SelectedValue。

如果Repeater在这种情况下是在Page_Init事件中进行数据绑定的,则在Page_Init事件之后ListBox的内容将准备就绪,并且ViewState能够正确恢复并自动选择SelectedValue。

我通常将Page_Init事件中的所有内容都绑定到数据上,以确保控件能够正确使用ViewState。

查看ASP.NET Web表单的页面生命周期以获取更多详细信息。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

0

所有控件在回发之间保持其更改 - 除非以编程方式再次创建它们。

也许你的ListBox失去了更改,因为你在每个PostBack上填充它。

尝试做

if(!IsPostBack) 
{ 
PopulateMyListBox() 
} 
+0

对不起,我没有让自己清楚。当通过Javascript编辑控件时会出现奇怪的行为。如果我编辑一个文本框客户端值后保持posback。另一方面,如果我编辑一个列表框(例如添加一个项目),更改不会保留。我只是想知道为什么。 – astorcas 2010-06-29 13:40:18

+0

查看状态 - 它可以跟踪您在服务页面时的所有选项 – 2010-06-29 13:57:13

+0

@astorcas:您的评论措辞比问题本身好得多。可以帮助编辑您的问题文本。 – 2010-06-29 14:50:09

相关问题