Сохранение Динамического UserControl на PostBack - PullRequest
2 голосов
/ 05 февраля 2012

Я динамически загружаю пользовательские элементы управления в 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

Итак ... элементы управления загружаются нормально, но я не могу найти способ сохранить их при обратной передаче, я не могу перезагрузить их, потому что пользователь уже ввел данные в usercontrol (это то, что мне нужно сохранить ).

P.S. Я пытался добавить их в список, а затем добавить список в ViewState, но я не смог правильно сериализовать элемент управления. Я реализовал ISerializable для кода userControl, но затем он говорит, что ASCX не помечен как сериализуемый с

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

Ответы [ 2 ]

5 голосов
/ 05 февраля 2012

Необходимо добавлять динамические элементы управления во время инициализации страницы, а не загрузки страницы.Тогда они будут подобраны по состоянию.И их нужно создавать каждый раз.Ispostback не требуется при создании динамических элементов управления.

2 голосов
/ 06 февраля 2012

Скопировано из комментариев:

Вам необходимо воссоздать пользовательские элементы управления, даже если IsPostback.

Вам нужно только присвоить те же идентификаторы, что и раньше, и добавить их в Page_Load самое позднее. Если вам известно количество создаваемых элементов управления (которое может быть сохранено в ViewState), вы можете получить идентификатор из переменной counter, добавив его в control-id.

...