2011-03-25 57 views
5

考虑这一点 -动态创建控件和跨回传保存控制值 - ASP.Net C#

我允许最终用户通过获得一些细节的ASP.Net页面动态创建一个标签控件。为了增加每一个标签,我得到的一些设置 -

  1. 分页标题
  2. 选项卡内容
  3. 标签页脚链接

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

由于控制是动态的,我能够在两种选择中的事情 -

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

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

回答

0

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

1

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

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