5

考虑一下 -

我允许最终用户通过获取一些详细信息在 ASP.Net 页面中动态创建选项卡控件。对于添加的每个选项卡,我都会得到一些设置 -

  1. 标签标题
  2. 标签内容
  3. 标签页脚链接

所以我得到了每个标签的这些细节。向用户提供了一个按钮“添加选项卡”到多个选项卡。所以我需要在页面中再添加一个选项卡设置面板来获取选项卡设置。但是这样做,我会丢失在先前创建的动态选项卡设置面板中输入的值。用户可以添加尽可能多的选项卡并为每个选项卡输入设置。最后,当他们保存它时,我构建了选项卡控件(基于他们的设置和内容)并渲染了控件。

由于控件是动态的,我可以选择两个选项 -

  1. 在添加第 n 个选项卡时重新创建以前创建的 n - 1 个选项卡设置面板。因此,在每次回发中,我都需要为每个选项卡重新创建设置面板。但我不知道如何在这种情况下坚持价值观。
  2. 使用简单的 html 控件在客户端添加设置面板,并在页面 UnLoad 解析控件 -> 解析设置 -> 将其保存在隐藏字段中 -> 在服务器端获取它。在这种情况下,我失去了需要为控件编写验证脚本的所有服务器端功能。

关于如何更好地做到这一点的任何见解?

4

3 回答 3

2

我会在服务器端添加控件,请记住,您需要在每次回发时重新创建所有控件

您可以保存需要在视图状态中创建的任何控件的详细信息,然后从CreateChildControls中构建您的控件树

于 2011-03-25T12:47:54.147 回答
1

一种方法是保存在 ViewState 中重新创建选项卡所需的数据。例如,您可以在 PreRender 事件期间执行此操作。在回发时,您需要重新创建最初拥有的控件,保持它们的原始 ID 和它们在层次结构中的顺序。您可以在 LoadViewState 阶段执行此操作。

进入 Page_Load 后,您可以创建新标签

于 2011-03-25T12:49:08.030 回答
0

我过去曾实施过选项#1。您必须在页面事件生命周期中的某个点重新创建控件树,以便当恢复视图状态的视图事件启动时,它具有所需的所有控件。据我所记得,您还需要将所有控件恢复到完全相同的层次结构中,并且在呈现页面时存在相同的名称,并且视图声明保持不变,然后再发送到客户端。如果有任何差异,加载视图状态将不适用于动态控件。

于 2011-03-25T12:41:55.680 回答