动态创建控件并在回发中保存控件值 – ASP.Net C#

考虑一下 –

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

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

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

由于控件是动态的,我可以选择两种方式 –

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

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

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

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

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

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

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