我注意到一些控件(例如TextBox)在回发之间保留其更改,即使更改是由客户端脚本进行的,而其他一些控件则不会(例如ListBox)。任何人都能解释我为什么?有没有办法将第一个行为扩展到其他控件? 谢谢!ViewState和客户端更改
回答
这取决于当列表框是被数据绑定或列表项被填充上。
通常情况下,当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表单的页面生命周期以获取更多详细信息。
所有控件在回发之间保持其更改 - 除非以编程方式再次创建它们。
也许你的ListBox失去了更改,因为你在每个PostBack上填充它。
尝试做
if(!IsPostBack)
{
PopulateMyListBox()
}
对不起,我没有让自己清楚。当通过Javascript编辑控件时会出现奇怪的行为。如果我编辑一个文本框客户端值后保持posback。另一方面,如果我编辑一个列表框(例如添加一个项目),更改不会保留。我只是想知道为什么。 – astorcas 2010-06-29 13:40:18
查看状态 - 它可以跟踪您在服务页面时的所有选项 – 2010-06-29 13:57:13
@astorcas:您的评论措辞比问题本身好得多。可以帮助编辑您的问题文本。 – 2010-06-29 14:50:09
- 1. 在客户端更改radnumerictextbox
- 2. asp.net下拉列表viewstate问题在客户端Ajax更新后
- 3. Java web服务客户端,动态更改客户端证书
- 4. JSF 2.0 ViewHandler.restoreView(),ViewHandler.createView():客户端或/和服务器Viewstate?
- 5. Viewstate客户端状态或服务器端状态
- 6. 更改源代码(客户端)和最终用户
- 7. WCF客户端和非WCF客户端
- 8. Java axis1.X客户端更改地址
- 9. 更改Lightswitch HTML客户端语言
- 10. 更改wcf客户端的xmlSerializer tempFilesLocation
- 11. 更改PrimeFaces对话是在客户端
- 12. pushsharp客户端名称已更改
- 13. 呼叫客户端更改数据库
- 14. 保存客户端html更改
- 15. SWT StyledText - 听客户端区域更改
- 16. 更改.Net客户端中DropDownList的值
- 17. 通过客户端更改HiddenField值
- 18. P4 - 客户端更改工作区
- 19. GWT客户端异常更改
- 20. Web客户端重大更改4.5
- 21. KnockOut.js文本绑定客户端端更改不更新viewmodel
- 22. 从更改列表中取消链接p4客户端并删除客户端
- 23. 是否无法为客户端永久更改客户端的Web代码?
- 24. 使用p4客户端排除文件:“客户端xxxx未更改”
- 25. 检查客户端证书和更多
- 26. ViewState和更改控制命令
- 27. ASP.net viewstate更改验证和jQquery AJAX
- 28. 为什么客户端X和Y在滚动中更改?
- 29. 系统ID和客户端更改管理系统别名
- 30. 按钮,更改客户端上的CommandName和CommandArgs
被标记为任何机会'ReadOnly'这些非改变文本框? – 2010-06-29 11:28:51
不,他们不是:) – astorcas 2010-06-29 13:40:46