我有一个页面,当用户浏览一系列问题时,动态生成控件。
当他们完成表单后,他们会单击一个提交按钮,我会收集他们输入的信息并将其存储在数据库中。
目前,我正在使用
创建其中几个控件.AutoPostBack = True
因此,每次用户将文本和制表符更改为下一个字段时,都会发生回发,并且下一个字段会失去焦点。
如果我设置
.AutoPostBack = False
然后焦点问题消失了,但最后当我收集数据时,用户在这些控件中输入的内容实际上都不可用于客户端代码,因为它还没有发布。
我想做以下其中一项:
有什么建议吗?
答案 0 :(得分:2)
自从我搞砸了这些已经有一段时间了,但我记得需要重新添加动态控件(页面加载或初始化?我忘了),确保我为每个动态添加的控件保证相同的ID在我可以从ViewState访问任何用户输入的数据之前添加它。
我还记得使用SessionState跟踪我添加的内容,因此我知道我需要为ViewState构建什么。
它感觉就像它现在所说的那样。祝你好运。
答案 1 :(得分:2)
动态创建控件的关键是在页面生命周期中 时添加控件。要保留视图状态并让动态控件保持已发布的值,需要在OnInit()
之前添加控件。
此外,需要在 每个 页面加载,回发与否重新添加控件。关于@KennyZ关于为每个控件保证相同ID的说法,只要您以相同的顺序添加相同数量的控件,.NET将保证ID是相同的。
关于AutoPostBack
属性,当我们想要执行由用户更改控件值触发的某些操作时,通常只将其设置为True。一个常见的例子是下拉列表;根据用户选择的内容,将不同的数据加载到页面的详细信息部分。因此,每次用户更改值时,我们都希望回发并获取要显示的新数据。
根据我对您的用例的理解,我建议对整个表单进行一次回发。