0

我有一个页面,当用户浏览一系列问题时,动态生成控件。

当他们完成表单时,他们单击提交按钮,我收集他们输入的信息并将其存储在数据库中。

目前,我正在创建其中的几个控件

.AutoPostBack = True

因此,每次用户将文本和选项卡更改到下一个字段时,都会发生回发,并且下一个字段会失去焦点。

如果我设置

.AutoPostBack = False

然后焦点问题就消失了,但是最后当我收集数据时,用户在这些控件中输入的任何内容实际上都不适用于客户端代码,因为它还没有发布。

我想做以下其中一项:

  1. 最后有一个大回发
  2. 在我离开控件时进行标准回发,而不会失去对控件的关注
  3. 还有什么我没想到的……?

有什么建议么?

4

2 回答 2

2

自从我弄乱这些已经有一段时间了,但我记得需要重新添加动态控件(页面加载或初始化?我忘记了),确保我保证每个动态添加的控件的 ID 与它获得时相同在我可以访问任何用户从 ViewState 输入的数据之前添加。

我还记得使用 SessionState 来跟踪我添加的内容,因此我知道我需要为 ViewState 构建什么。

当时感觉就像现在描述它听起来一样笨拙。祝你好运。

于 2012-05-17T20:49:44.980 回答
2

动态创建控件的关键是页面生命周期中添加控件。要保留视图状态并让动态控件维护发布的值,需要在不迟于OnInit().

此外,需要在每次页面加载时重新添加控件,无论是否回发。关于@KennyZ 所说的保证每个控件的 ID 相同,只要您以相同的顺序添加相同数量的控件,.NET 将保证 ID 相同。

关于AutoPostBack属性,通常只有当我们想要执行一些由用户更改控件值触发的操作时才将其设置为 True。一个常见的例子是下拉列表;根据用户选择的内容,不同的数据会被加载到页面的详细信息部分。因此,每次用户更改值时,我们都希望回发并获取新数据以进行显示。

根据我对您的用例的理解,我建议对整个表单进行一次回发。

于 2012-05-17T21:25:16.040 回答