asp.net在回发后动态添加用户控件保存值

Ben*_*Ben 7 c# asp.net user-controls dynamically-generated

这是我的问题.我有一个usercontrol,我希望允许用户使用按钮单击添加任意数量的实例(每次单击一个按钮,我想将另一个用户控件实例添加到Panel).它第一次工作正常,但每个额外的回发删除所有添加的控件.我跟踪用户添加的用户控件的数量没有问题,但我如何确保它们保持在回发之前的状态?我已经阅读了一些关于使用SaveViewState和LoadViewState的人的帖子,但我找不到任何例子.

我最大的问题是确保每个用户控件的所有文本框和下拉列表在每个回发后都保持填充相同的文本/选定值/数据

提前谢谢,本

Cla*_*edi 10

由于您是以编程方式向页面添加控件,因此您需要在每次回发时重新创建它们.

此外,您必须重新创建页面上以编程方式添加的控件PreInitInit事件.这适用于正确的视图状态恢复事件管理.

如果你不这样做,控制将在回发时消失,他们将不会处理任何事件.

编辑

虽然建议添加动态控件PreInit或者Init它是真的(如Dustin Hodges所说),如果你添加它们可能会有效page_load.我会说你应该避免它,除非你别无选择.

您可以在Page_Load事件处理程序中加载控件并正确维护视图状态.
这完全取决于您是否以编程方式设置动态加载控件的任何属性,如果是,则相对于Controls.Add(dynamicControl)行执行此操作.
对此的深入讨论有点超出了本文的范围,但它可能起作用的原因是因为Controls属性的Add()方法以递归方式将父视图状态加载到其子节点中,即使已经过了加载视图状态阶段.

来源MSDN


Kla*_*sen 0

查看您的并在清除面板的行之前PageLoad添加。if(!this.IsPostBack)

这当然只是一个猜测,但我见过很多与此相关的问题