我正在将用户控件动态加载到一个 div 中,我需要在回发时保留它,以便在用户完成编辑后调用 Save
方法。 div 和所有用户控件都有 EnableViewState = True
。
ASPX Div 声明
<div id="dynamicDiv" runat="server" enableviewstate="true">
</div>
代码隐藏
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not IsPostBack) Then
'Implement some logic to load the User Controls using LoadControl
'Set all the userControl properties (including EnableViewState = True)
'Call a method in the user control to load it's content
Me.dynamicDiv.Controls.add(userControl)
End If
End Sub
Protected Sub Save(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
For Each t As userControlType In Me.dynamicDiv.Controls
t.Save()
Next
End Sub
所以...控件加载正常,但我找不到在回发时保留它们的方法,我无法重新加载它们,因为用户已经将数据输入到用户控件中(这是我需要保存的).
P.S. 我尝试将它们添加到列表,然后将列表添加到 ViewState
,但我无法正确序列化控件。我为 userControl 的代码实现了 ISerializable
但随后它说 ASCX 没有被标记为可序列化的
程序集“App_Web_pn5vxhpw,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”中的类型“ASP.controls_userControlType_ascx”未标记为可序列化。
最佳答案
动态控件需要在页面初始化而不是页面加载期间添加。然后它们将被 View 状态拾取。而且每次都需要创建它们。创建动态控件时不需要 Ispostback。
关于asp.net - 在 PostBack 上保留动态 UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149953/