在PostBack上保留动态UserControl

Ped*_*C88 2 vb.net asp.net viewstate user-controls postback

我正在将用户控件动态加载到div中,我需要在回发时保留该控件,以便Save在用户完成编辑后调用方法。div和所有用户控件都具有EnableViewState = True

ASPX Div声明

<div id="dynamicDiv" runat="server" enableviewstate="true">
</div>
Run Code Online (Sandbox Code Playgroud)

背后的代码

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
Run Code Online (Sandbox Code Playgroud)

所以...控件可以很好地加载,但是我找不到在回发时保存它们的方法,因为用户已经将数据输入到usercontrol中(我需要保存),所以我无法重新加载它们。

PS我尝试将它们添加到列表中,然后将列表添加到中ViewState,但是我无法正确地序列化控​​件。我ISerializable在后面实现了userControl的代码,但是它说ASCX被mot标签为可序列化的

Type 'ASP.controls_userControlType_ascx' in Assembly 'App_Web_pn5vxhpw, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

Jas*_*ley 5

需要在页面初始化而不是页面加载期间添加动态控件。然后它们将被viewstate拾取。而且每次都需要创建它们。创建动态控件时不需要Ispostback。