我正在动态加载用户控件到div中,我需要在回发时保留以便在用户完成编辑后调用Save
方法。该div和所有用户控件有EnableViewState = True
。在PostBack上保留动态用户控件
ASPX事业部申报
<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
所以......控件加载罚款,但我不能回传找到一个方法来保护者他们,我无法重新加载它们,因为用户已经将数据输入到usercontrol(这是我需要保存的)。
P.S.我尝试将它们添加到列表中,然后将该列表添加到ViewState
,但我无法正确序列化控件。我实现ISerializable
的用户控件的代码后面,但随后说,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.
如果使用'IsPostback',则还需要重新创建UserControl。 – 2012-02-05 19:16:59
问题是重新创建的控件不会有任何用户的输入。 – PedroC88 2012-02-06 03:55:19
如果这是真的,回发后没有ASP.NET控件可以保留值。您只需要像以前一样分配相同的ID,并最晚将它们添加到Page_Load中。如果您知道要创建的控件的数量(可以存储在ViewState中),则可以通过将计数器变量附加到控件ID来获取ID。 – 2012-02-06 08:05:52